这是我的简单合同
contract Test {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
/* Initializes contract with initial supply tokens to the creator of the contract */
function Test(
uint256 initialSupply
) {
balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
}
/* Send coins */
function transfer(address _to, uint256 _value) {
if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough
if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
balanceOf[msg.sender] -= _value; // Subtract from the sender
balanceOf[_to] += _value; // Add the same to the recipient
}
function gettokenBalance(address to)constant returns (uint256){
return balanceOf[to];
}
}
当我转移令牌超过初始供应到另一个帐户时,函数transfer
会抛出异常。
如何处理此异常并知道事务无法完成。我使用web3j并调用函数传输,如下所示
Test test = Test.load(contractObj.getContractAddress(), web3j, credentials, gasprice,gaslimit);
TransactionReceipt balanceOf = test.transfer(new Address(address), transferBalance).get();
发布于 2017-06-27 23:23:11
我从未使用过web3js,但您可以尝试使用try-catch:
try{
Test test = Test.load(contractObj.getContractAddress(), web3j, credentials, gasprice,gaslimit);
TransactionReceipt balanceOf = test.transfer(new Address(address), transferBalance).get();
} catch (Exception e){
// log you exception
}
发布于 2017-07-03 00:27:46
如何处理此异常并了解事务无法完成
在Solidity中有一个例外(没有参数的throw
),它是“耗尽”的。所以你的“有问题的”事务是完成的,但是它耗尽了汽油。如果您知道事务散列,则可以检查gasLimit
和gasUsed
。如果它们相等,则您的事务可能已耗尽*
的汽油。请参阅更多信息here。
*
假设您提供的气体足以满足“正确”事务的需要。
https://stackoverflow.com/questions/44782281
复制相似问题