Solidity(address的四個方法)


address的四個方法
send,call,callcode,delegatecall

例子:
發送以太幣的send方法
//下面是send方法,涉及到以太幣的情況可能用到payable,senddemo方法是可以發送以太幣過去的,add.transfer(u)

pragma solidity ^0.4.1; contract addressDemo{ function addressDemo() payable{ } function sendDemo(address add){ uint u=1 ether;//以太幣的最小單位是wei,最大單位是ether
add.transfer(u) } }

 

call方法,注意地址.call,和地址.delegatecall方法的區別,call是自己本身不發生改變,被調用的值發生改變,delegatecall是自己本省的值發生改變,被調用的不發生改變

pragma solidity ^0.4.1; //首先定義了兩個合約
contract A{ uint public p; event e(address add,uint p)//為了觀察聲明一個事件 //定義了一個方法
function fun(uint u1,uint u2) { p=u1+u2;//改變了A合約中的p,改變被調用者合約方法中的變量
e(msg.sender,p)//下面的2,3傳給了fun方法
 } } contract B{ uint public q; bool public b; //當我們用B中的call方法的時候,調用A中的某個方法的執行,只會改變A中某個方法的值,B中的某個方法的值不會發生改變,被調用的合約本身發生改變
 function call1(address add) returns(bool){ b=add.call(bytes4(keccak256("fun(uint256,uint256)")),2,3) return b;//下面的add調用call方法
} //下面的delegatecall是會改變B中的某個方法,而A中的某個方法是不會有任何的改變,下面是自己的合約發生變化
function call2(address add) returns(bool){ b=add.delegatecall(bytes4(keccak256("fun(uint256,uint256)")),1,3) return b; } } 

 

例子:

pragma solidity ^0.4.0; //定義一個合約
contract CA{ uint public p; bytes public failmsg; string public str; event e(address add,uint p) event e1(address add, bytes b); //定義一個構造函數,構造方法 
function CA(string _str) { str=_str;//str重新被賦值
} function fun(uint u1,uint u2) { p=u1+u2; e(msg.sender,p) } //構造一個匿名函數
function () {//下面就會執行這個匿名函數
failmsg=msg.data; e1(msg.sender,failmsg)// } } contract CB{ uint public q; bool public b; function call1(address add) returns(bool){ b=add.call(bytes4(keccak256("fun(uint256,uint256)")),2,3); return b } function call2(address add) returns(bool){ b=add.delegatecall(bytes4(keccak256("fun(uint256,uint256)")),2,3); return b } //使用的是call方法,上面發生的值發生改變,下面不發生改變
function call3(address add) returns(bool){ b=false b=add.call("aaaa",2,4,5,54,3); return b } //下面是本身自己的值發生改變,b的值發生改變
function call4(address add) returns(bool){ b=false; b=add.delegatecall("bbbb",5,"10x2323",43);//執行匿名函數
return b } }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM