国密算法合约EVM debug之旅

本文探讨了一起在项目中使用国密算法进行合约开发时遇到的问题。当尝试调用以太坊合约方法时,由于交易input中的方法签名与solc编译的签名不匹配导致交易执行失败。通过分析Go合约调用、EVM Trace log和hash生成方法签名,发现方法签名不一致是问题关键。最终,通过使用国密solc编译器生成的code和input,成功解决了合约调用失败的问题。
摘要由CSDN通过智能技术生成

项目中用到了国密算法,hash为国密方法,用solc编译器编译合约代码,调用合约方法执行失败,找了好长时间发现了原因。

首先部署合约是没问题的,合约执行方法的时候不成功,后面发现是交易input中的add方法签名和用以太坊solc编译出来的方法签名不一致,合约执行过程中找不到方法,交易执行失败

solidity源码如下

pragma solidity ^0.6.4;

contract C {
    uint256 a;
    constructor() public  {
      a = 1;
    }
    function add(uint256 b) public {
        a = a + b;
    }
}

Go合约调用

solcjs --bin math.sol
solcjs --abi math.sol

生成go调用合约模板命令

//生成合约 go文件
abigen --bin=math_sol_C.bin --abi=math_sol_C.abi --pkg=math --out=Math.go

Go源码如下

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值