目前刚刚开始学习AppChain,在查看demo的代码时,有一个小疑问:
通过 myContract.methods.myMethod().send(transaction)的方式调用时,必须要transaction这个参数吗?
如果是的话,是不是意味着只要是和Appchain交互就必须要transaction,为什么呢?
目前刚刚开始学习AppChain,在查看demo的代码时,有一个小疑问:
通过 myContract.methods.myMethod().send(transaction)的方式调用时,必须要transaction这个参数吗?
如果是的话,是不是意味着只要是和Appchain交互就必须要transaction,为什么呢?
myContract.methods.myMethod().send(transaction) 中的 transaction 是必须的, 这里的 send 方法会发出 json-rpc 中 sendTransaction 请求, 因此必须包含交易信息(比如 validUntilBlock)
但不是每个 AppChain 的请求都需要 transaction 参数, 比如 myContract.methods.myMethods().call() 如果智能合约不要求 msg.sender 等参数, 就不需要传入 transaction 来发起请求.
如果是要传入智能合约方法中的参数, 则是通过 myContract.methods.myMethods(parameters).call() 的方式传入
其实我感到疑惑的原因主要是:
web3的方式调用,但在web3中似乎并不需要提供transaction参数transaction在nervos.js中的send()是必须的,那么为什么在web3中不需要呢而nervos中需要呢,有什么设计上的考虑么?https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send
myContract.methods.myMethod([param1[, param2[, ...]]]).send(options[, callback])
你看的可能是 0.2 版本, web3 1.0 版本里也是需要提供的, 对应上面一行代码里的 options
不过在web3 1.0里面, option中只有from是必须提供的
那么在nervos.js中是transaction中所有内容都必须提供对吧,所有才会创建transaction的模板
在调用 send 方法的时候是必须的, 因为是发交易, AppChain 会对一些关键参数做校验, 比如 validUntilBlock
如果是调用 call 方法, 则根据合约需要的参数传入 transaction 部分字段