Contract-Invocation

合約函式返回地址?

  • February 23, 2022

學習乙太坊,我希望這是一個簡單的。我寫了一個簡單的測試合約

contract Mini{
uint balance;

// constructor
// runs once upon creation
function Mini(){
   balance = 1000;
}

function deposit(uint _value) returns(uint _newValue){
   balance += _value;
   return balance;
}

function benchmark() returns(uint _newValue){
   return 4545;
}}

當我呼叫“基準”時

   var result = myContractInstance.benchmark(function(err,res){
       console.log(res);
   });

響應是一個地址(例如 0xd1d618bcb179db8b020358710138d1a008f4f39e)。我可以在 etherscan 中看到交易。問題,我如何查看響應值?

benchmark 不是一個常量函式,因此它會為您返回一個事務 id。

如果您需要返回一個值或從塊鏈中讀取一個值,您可以使用常量函式

function benchmark() public constant returns(uint _newValue){ return 4545; }}

我讓它工作。我錯過了“常量”和“視圖”。這是最終的契約:

contract Mini{
   uint balance;

   // constructor
   function Mini(){
       balance = 1000;
   }

   function deposit(uint _value) public returns(uint _newValue){
       balance += _value;
       return balance;
   }

   function withdraw(uint _value) view  returns(uint _newValue){
       balance -= _value;
       return balance;
   }

   function benchmark() public  constant returns(uint _newValue){
       return 4545;
   }

   function getBalance() public constant returns(uint _newValue){
      return balance;
   } 
}

然後我可以按如下方式呼叫函式:

var MyContract = web3.eth.contract(abi);

var myContractInstance = MyContract.at('YourContractAddress');


myContractInstance.benchmark(function(err,res){
   console.log(res);
});

myContractInstance.deposit(200,function(err,res){
   console.log(res);
});

myContractInstance.withdraw(50,function(err,res){
   console.log(res);
});

myContractInstance.getBalance(function(err,res){
   console.log(res);
});

引用自:https://ethereum.stackexchange.com/questions/38818