目前刚刚开始学习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 部分字段