日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊知识教程------智能合约(2)调用 delegatecall call send

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊知识教程------智能合约(2)调用 delegatecall call send 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 函數調用call(…)

<address>.call(…)
可以接受任何長度、任何類型的參數,每個參數將被填充到 32 字節并拼接在一起 。 但有一種例外情況,當第一個參數的長度恰好是 4 字節時,該參數不會被打包成 32 字節,而是被作為指定函數的簽名 。

eg. 第一個參數 bytes4(keccak256(”fun(uint256)”))為長度 4字節的函數簽名,表示調用一個函數簽名為 fun(unit256)的函數, 4 則是實際傳給 fun 函數的參數:
address nameReg = Ox72ba7d8e73fe8eb666ea66babc8116a4lbfb10e2;
nameReg.call(bytes4(keccak256(“fun(uint256)”)), 4);

函數簽名使用基本類型的典型格式定義,如果有多個參數要使用逗號隔開,并且要去掉表達式中的所有空格 。

2. 代理調用( delegate call )

與函數調用相同,它將目標地址的代碼加載到發起調用的合約上下文中來執行,卻不會改變當前的上下文環境,包括msg.sender 和 msg.value 、當前賬戶、存儲、內存等,這使得智能合約可以在運行時動態地從其他地址加載代碼。

例如: A 調用 B, B 委托調用 c,此時 msg.sender 為 A 。 而如果是普通調用,則 msg.sender 為 B 。
這意味著一個合約在運行時可以從另外一個地址動態加載代碼 。存儲當前地址和余額都指向發起調用的合約,只有代碼是從被調用地址獲取的。這使得Solidity 可以實現庫能力。

3. 函數調用 send transaction

函數調用call和send的區別

callsend
不修改智能合約的數據修改智能合約的數據
函數可以返回數據函數不能返回數據, 因為函數需要花時間執行
立刻執行需要幾十秒才能執行完畢,返回值是transaction的hash
免費要花錢 錢!!!

總結

以上是生活随笔為你收集整理的以太坊知识教程------智能合约(2)调用 delegatecall call send的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。