如何在javascript中使用以太坊契约的状态转换方法?

时间:2016-05-26 04:57:43

标签: javascript ethereum solidity

我正在学习以太坊智能合约。我通过Mist浏览器部署了我的欢迎合同,它在Mist上运行良好。

所以我想使用我部署的欢迎合同制作简单的Dapp。

我的合约代码为Solidity:

contract mortal {
  address owner;
  function mortal() { owner = msg.sender; }
  function kill() { if (msg.sender == owner) suicide(owner); }
}

contract greeter is mortal {
  string greeting;

  function greeter(string _greeting) public {
    greeting = _greeting;
  }

  function greet() constant returns (string) {
    return greeting;
  }

  function changeMsg(string msg) {
    greeting = msg;
  }
}

Javascript中的我的Dapp代码:

_connect() {

  /* ... */

  contract = web3.eth.contract(CONTRACT_ABI);
  instance = contract.at(CONTRACT_ADDRESS);

}

_greet() {
  console.log(instance.greet());
}

_changeMsg(msg) {
  console.log(instance.changeMsg(msg));
}

_greet()函数效果很好,它会返回我的问候语。

但是_changeMsg()函数只返回一些hexa字符串。 如何通过_changeMsg()函数更改问候消息?

谢谢。

1 个答案:

答案 0 :(得分:1)

您会发现邮件确实已更新:请再次致电⠧ Building <--- Last few GCs ---> 216135 ms: Scavenge 1401.6 (1458.1) -> 1401.6 (1458.1) MB, 78.7 / 0 ms (+ 3.0 ms in 1 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep]. 218646 ms: Mark-sweep 1401.6 (1458.1) -> 1401.2 (1458.1) MB, 2510.4 / 0 ms (+ 4.0 ms in 2 steps since start of marking, biggest step 3.0 ms) [last resort gc]. 221062 ms: Mark-sweep 1401.2 (1458.1) -> 1400.3 (1458.1) MB, 2415.8 / 0 ms [last resort gc]. <--- JS stacktrace ---> ==== JS stack trace ========================================= Security context: 0x62f3f2b4629 <JS Object> 1: eval [/home/ofry/my-new-lk/node_modules/less/lib/less/tree/ruleset.js:~33] [pc=0x3f6eb137cc4f] (this=0x25d46c7e8bd9 <JS Object>,context=0xe80f72a7819 <JS Object>) 2: eval [/home/ofry/my-new-lk/node_modules/less/lib/less/tree/ruleset.js:~33] [pc=0x3f6eb137ed67] (this=0xe80f72a7a31 <JS Object>,context=0xe80f72a7819 <JS Object>) 3: evalCall [/home/ofry/my-new-lk/node_modules/less/lib... FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

_greet()返回的十六进制是事务哈希,它是状态更改方法(事务)总是返回的。

有关详细信息,请参阅:

https://ethereum.stackexchange.com/questions/765/what-is-the-difference-between-a-transaction-and-a-call