ethereum 智能合约开发

 以太坊智能合约开发有许多的概念,对于初次接触到的开发者有很多的疑惑,经过自己的总结,对以太坊智能合约相关概念

有一个总结,写了一个测试的js脚步,使用remix 作为solidity开发工具,需要自己安装,作为备忘。

首先需要一个简单的智能合约sol:

// ----------------------------------------------------------------------------
 // Owned contract
 // ----------------------------------------------------------------------------
 contract Owned {
     address public owner;

     address public newOwner;

      event OwnershipTransferred(address indexed _from, address indexed _to);


      function Owned() public {
          owner = msg.sender;
      }


      modifier onlyOwner {
          require(msg.sender == owner);
          _;
      }


      function transferOwnership(address _newOwner) public onlyOwner {
          newOwner = _newOwner;
      }
      function acceptOwnership() public {
          require(msg.sender == newOwner);
          OwnershipTransferred(owner, newOwner);
          owner = newOwner;
          newOwner = address(0);
      } 

 }

然后是相关概念的测试js程序:

var ownedContract = web3.eth.contract([{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]);
/*
var owned = ownedContract.new(
   {
     from: web3.eth.accounts[0], 
     data: '0x6060604052341561000f57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506104148061005e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806379ba5097146100675780638da5cb5b1461007c578063d4ee1d90146100d1578063f2fde38b14610126575b600080fd5b341561007257600080fd5b61007a61015f565b005b341561008757600080fd5b61008f6102fe565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100dc57600080fd5b6100e4610323565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561013157600080fd5b61015d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610349565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156101bb57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156103a457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505600a165627a7a7230582015c5f0007d32295cdee391924291240246ef73fec7a94bb222f66d148c3523710029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })


 contract Owned {
    address public owner;
    address public newOwner;


    event OwnershipTransferred(address indexed _from, address indexed _to);


    function Owned() public {
        owner = msg.sender;
    }


    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }


    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
    function acceptOwnership() public {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}
caddr=owend.address


*/
personal.unlockAccount(eth.accounts[2], '123')
personal.unlockAccount(eth.accounts[0], '123')
caddr="0x76475534b4646da2b4b2cd2dd7d8e11f111b8458"
owned=ownedContract.at(caddr)
newAI=function(){
for (var i = 0; i < eth.accounts.length; i++){
if(eth.accounts[i] == owned.owner()){
return 2 - i;
}
}
return 0;
}()


owned.transferOwnership.sendTransaction(eth.accounts[newAI], {from:owned.owner()})


fl.stopWatching()
topic=web3.sha3("OwnershipTransferred(address,address)")
fl=web3.eth.filter({topics:[topic], address:caddr}, function(error, result){
console.info("==>",JSON.stringify(result))
}
)
//failed 
owned.acceptOwnership.estimateGas({from:eth.accounts[1]})


owned.acceptOwnership.estimateGas({from:owned.newOwner()})
owned.transferOwnership.estimateGas(eth.accounts[newAI],{from:owned.owner()})


owned.acceptOwnership.sendTransaction({from:eth.accounts[newAI]})

你可能感兴趣的:(区块链,以太坊)