blockchain - 在波场网络中签署并广播智能合约交易

标签 blockchain signing tron tronweb

使用 node.js 客户端,我试图通过以下方式调用智能合约功能:

  • 创建交易
  • 签名
  • 广播签署的交易

  • 我部署了一个简单的智能合约:
    pragma solidity ^0.4.25;
    
    contract Test {
    
        event MyEvent(address sender, string message, uint sessionId, uint value);
        event TestEvent(address sender);
    
        constructor() public {
        }
    
    
        function testFunction(string message, uint sessionId)
        public
        payable {
            emit MyEvent(msg.sender, message, sessionId, msg.value);
        }
        
        function test2()
        public {
            emit TestEvent(msg.sender);
        }
    }
    
    我成功调用 test2 (发送空参数数组时)但未能调用 testFunction这需要参数。
    我试过使用 tronweb triggerSmartContract call :
    async function triggerSmartContract() {
    
        try {
    
            const options = {
                feeLimit: 1000000000,
                callValue: 50
            };
    
            const parameters = [{type: 'string', value: 'test-round-id-1'}, {type: 'uint', value: 12345}];
            const issuerAddress = tronWeb.defaultAddress.base58;
            const functionSelector = 'testFunction(string, uint)';
    
            let transactionObject = await tronWeb.transactionBuilder.triggerSmartContract (
                contract_address,
                functionSelector,
                options,
                parameters,
                tronWeb.address.toHex(issuerAddress)
            );
    
            if (!transactionObject.result || !transactionObject.result.result)
                return console.error('Unknown error: ' + txJson, null, 2);
    
            // Signing the transaction
            const signedTransaction = await tronWeb.trx.sign(transactionObject.transaction);
    
            if (!signedTransaction.signature) {
                return console.error('Transaction was not signed properly');
            }
    
            // Broadcasting the transaction
            const broadcast = await tronWeb.trx.sendRawTransaction(signedTransaction);
            console.log(`broadcast: ${broadcast}`);
        } catch (e) {
            return console.error(e);
        }
    }
    
    代码运行并在区块链上创建交易,但结果为 FAIL-REVERT OPCODE EXECUTED .
    在 tronweb 对象中定义的地址和 key 的钱包中有足够的资金(它没有耗尽气体/没有足够的资金很重要)。
    智能合约中的功能也被定义为应付款。
    由于我可以成功调用任何没有参数的函数,我倾向于认为问题与我构造 parameters 的方式有关。大批。我建了 parameters在遍历 source code of the transactionBuilder (line 833) 之后以这种方式排列(成对的 typevalue ) .
    有什么建议?

    最佳答案

    有完全相同的问题。解决方案:

  • 删除 const functionSelector = 'testFunction(string,uint)'; 中的空格正如malysh所建议的
  • 更改 uintuint256
  • 关于blockchain - 在波场网络中签署并广播智能合约交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625008/

    相关文章:

    java - 使用 Hyperledger Fabric Java sdk 获取区 block 信息

    linux - 如何在 Hyperledger Fabric 中创建一个新 block

    rust - 如何在 Substrate 特定类型和 Rust 原始类型之间进行转换?

    android - 签署 Android 应用程序 : What about the various fields?

    private-key - 如何在TRON上通过私钥查找公共(public)地址

    hyperledger-fabric - super 账本中的数据存储

    android bundleRelease 不签署 aab

    soap - 我如何在soap消息中签署BinarySecurityToken

    python - 导入 tronweb 显示导入错误 : cannot import name 'hashable' from 'collections'

    php - 拉维尔 5.8 : How to pass two arguements to Event & Listener