合约函数返回交易对象而不是 BOOL
Contract function returning a transaction object instead of a BOOL
为什么我没有收到预期的 BOOL 对象?结果是否包含在我收到的这个奇怪的对象中?
它没有返回 bool 结果,而是 returns 一个像这样的奇怪对象 :
{"tx":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","receipt":{"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","transactionIndex":0,"blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"gasUsed":40486,"cumulativeGasUsed":40486,"contractAddress":null,"logs":[{"logIndex":0,"transactionIndex":0,"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"address":"0x391737864a8dcdc7b790877dd1b06cfb99067272","data":"0x0000000000000000000000000000000000000000000000000000000000000001","topics":["0x14d54973c509ce10520c1e0be443c7340095855c124ddda2a3627d4fa542d851","0x0000000000000000000000000000000000000000000000000000000000000001"],"type":"mined"}],"status":1},"logs":[{"logIndex":0,"transactionIndex":0,"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"address":"0x391737864a8dcdc7b790877dd1b06cfb99067272","type":"mined","event":"Upgrade","args":{"_tokenId":"1","_upgradeType":"1"}}]}
交易不能return向发起交易的客户提供价值。当客户端发起交易时,您提供的回调将被触发两次。一旦提交交易但在被挖掘之前(交易哈希)。第二个将在交易被挖掘之后(收据)。有关使用 web3js 1.0 的示例,请参见 this(对于 web3js 0.20.x 和 web3j 来说,它是相似的)。
但是,当从另一个合约调用时,您可以 return 来自非常量函数。挖掘时,这两个函数都将在同一个 EVM 中执行,因此 return 允许在那里输入一个值。
如果您需要 return 从交易到客户的价值,您需要 1) 将价值存储到您的合约状态,然后在交易完成后调用 constant
函数挖掘以检索您客户端中的值,或 2) 通过 event 登录并在您的客户端上设置监听器。
为什么我没有收到预期的 BOOL 对象?结果是否包含在我收到的这个奇怪的对象中?
它没有返回 bool 结果,而是 returns 一个像这样的奇怪对象 :
{"tx":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","receipt":{"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","transactionIndex":0,"blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"gasUsed":40486,"cumulativeGasUsed":40486,"contractAddress":null,"logs":[{"logIndex":0,"transactionIndex":0,"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"address":"0x391737864a8dcdc7b790877dd1b06cfb99067272","data":"0x0000000000000000000000000000000000000000000000000000000000000001","topics":["0x14d54973c509ce10520c1e0be443c7340095855c124ddda2a3627d4fa542d851","0x0000000000000000000000000000000000000000000000000000000000000001"],"type":"mined"}],"status":1},"logs":[{"logIndex":0,"transactionIndex":0,"transactionHash":"0x753a987d79c90cb9c71fc312d14472d3d179cb6760708062485c906eb15cc7b1","blockHash":"0x892b62649ea689cdd3e47bd4ac49b6a35fcf414ef10d6a1ccdeb473cb1821233","blockNumber":413,"address":"0x391737864a8dcdc7b790877dd1b06cfb99067272","type":"mined","event":"Upgrade","args":{"_tokenId":"1","_upgradeType":"1"}}]}
交易不能return向发起交易的客户提供价值。当客户端发起交易时,您提供的回调将被触发两次。一旦提交交易但在被挖掘之前(交易哈希)。第二个将在交易被挖掘之后(收据)。有关使用 web3js 1.0 的示例,请参见 this(对于 web3js 0.20.x 和 web3j 来说,它是相似的)。
但是,当从另一个合约调用时,您可以 return 来自非常量函数。挖掘时,这两个函数都将在同一个 EVM 中执行,因此 return 允许在那里输入一个值。
如果您需要 return 从交易到客户的价值,您需要 1) 将价值存储到您的合约状态,然后在交易完成后调用 constant
函数挖掘以检索您客户端中的值,或 2) 通过 event 登录并在您的客户端上设置监听器。