Node.js实现上链,蚂蚁链-开放联盟链

前置要求

1. 注册蚂蚁开放联盟链账号

开放联盟链_区块链开发_区块链应用 - 蚂蚁数字科技

2. 开通开放联盟链服务

3. 获取必要的配置信息:

- ACCESS_ID

- access.key文件

ACCESS_ID对应的私钥文件

- BIZID(链ID)

- tenantid

- mykmsKeyId

具体实现代码

const chainSDK = require('../utils/chainSDK');
const config = require('../config/chainConfig');
const crypto = require('crypto');

class ArticleController {
    async uploadToChain(article) {
        try {
            // 生成文章内容的哈希
            const contentHash = crypto
                .createHash('sha256')
                .update(JSON.stringify(article))
                .digest('hex');
                
            const options = {
                orderId: contentHash,           // 使用内容哈希作为唯一订单号
                bizid: config.bizid,            // 链ID
                account: "",         // 账户名
                content: JSON.stringify(article),// 文章内容
                method: "DEPOSIT",              // 存证方法
                accessId: config.accessId,
                token: chainSDK.token,
                gas: 100000,                    // 燃料值
                tenantid: "",          // 租户ID,从AccessId中提取
                mykmsKeyId: ""     ,    // KMS密钥ID
            };

            return new Promise((resolve, reject) => {
                chainSDK.antblc.callApi("api/contract/chainCallForBiz", options, (err, result) => {
                    if(err) reject(err);
                    resolve({
                        success: true,
                        txHash: result.data,    // 交易哈希
                        contentHash: contentHash // 内容哈希
                    });
                });
            });
        } catch (error) {
            throw new Error(`上链失败: ${error.message}`);
        }
    }

    async queryTransaction(txHash) {
        try {
            const options = {
                bizid: config.bizid,
                method: "QUERYTRANSACTION",
                hash: txHash,
                accessId: config.accessId,
                token: chainSDK.token
            };

            return new Promise((resolve, reject) => {
                chainSDK.antblc.callApi("api/contract/chainCall", options, (err, result) => {
                    if(err) reject(err);
                    const data = JSON.parse(result.data);
                    resolve({
                        success: true,
                        blockNumber: data.blockNumber,
                        transaction: data.transactionDO
                    });
                });
            });
        } catch (error) {
            throw new Error(`查询交易失败: ${error.message}`);
        }
    }
}

module.exports = new ArticleController(); 

 终端测试运行

curl -X POST http://localhost:3000/api/article/upload -H "Content-Type: application/json" -d '{"title": "测试文章", "content": "这是一篇测 试文章的内容", "author": "这是标题"}'

 

 

仓库地址

https://github.com/R-K05/Blockchain 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吞掉星星的鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值