找回密码
 立即注册

扫一扫,登录网站

首页 百科 查看内容
  • 9993
  • 0
  • 分享到

探讨更简单的以太坊多重签名合约

2018-5-11 12:31

来源: 零识区块链 作者: Christian Lundkvist

区块链中的智能合约完整代码


完整的代码为:
pragma solidity 0.4.14;
contract SimpleMultiSig {
 
  uint publicnonce;                // (only) mutablestate
  uint publicthreshold;            // immutable state
  mapping(address => bool) isOwner; // immutable state
  address[]public ownersArr;        // immutablestate
 
  function SimpleMultiSig(uint threshold_,address[] owners_) {
    if(owners_.length > 10 || threshold_ > owners_.length || threshold_ == 0){throw;}
 
    for (uinti=0; i
     isOwner[owners_[i]] = true;
    }
    ownersArr= owners_;
    threshold= threshold_;
  }
 
  // Notethat address recovered from signatures must be strictly increasing
  functionexecute(uint8[] sigV, bytes32[] sigR, bytes32[] sigS, address destination, uintvalue, bytes data) {
    if(sigR.length != threshold) {throw;}
    if(sigR.length != sigS.length || sigR.length != sigV.length) {throw;}
 
    //Follows ERC191 signature scheme: https://github.com/ethereum/EIPs/issues/191
    bytes32txHash = sha3(byte(0x19), byte(0), this, destination, value, data, nonce);
 
    addresslastAdd = address(0); // cannot have address(0) as an owner
    for (uinti = 0; i < threshold; i++) {
       address recovered = ecrecover(txHash, sigV[i], sigR[i], sigS[i]);
        if(recovered <= lastAdd || !isOwner[recovered]) throw;
       lastAdd = recovered;
    }
 
    // If wemake it here all signatures are accounted for
    nonce =nonce + 1;
    if(!destination.call.value(value)(data)) {throw;}
  }
 
  function ()payable {}
}
此代码也可以在github中找到。

效益

此合约的有益属性包括:
l  最小代码库:只有40行代码
l  最少可变状态:唯一可变的数据是,每一次执行都会增加一个单元(unit)。
l  最小界面:由单一功能构成的界面.
l  能够发送任意交易,故而支持代币(token)

由于缺乏复杂的状态转换,在没有资金的情况下,该合约便无法转入“冻结”状态。而因为唯一可能的状态转换是简单的增量计数器,所以该合约永远处于正确状态。且由于使用了32字节的整数,计数器便不可能溢出。同时,测试也变得更简单了,因为事实上(除构造函数外)只有一个函数需要测试。
 
但由于我们尽可能地简化了链上逻辑,因而增加了链下工作流程的复杂性,这便导致了一些缺陷与不足,比如:
l   需要用户给非交易签名,而这可能妨碍某些硬件钱包的使用
l  为了发送交易,需要终端用户进行链下协调。

版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部