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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

以太坊知识教程------智能合约的5种设计模式

發布時間:2025/3/21 asp.net 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊知识教程------智能合约的5种设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、自毀合約

合約自毀模式用于終止一個合約,這意味著將從區塊鏈上永久刪除這個合約。 一旦被銷毀,就不可能調用合約的功能,也不會在賬本中記錄交易。
eg. 貸款合約,它應當在貸款還清后自動銷毀;另一個案例是基于時間的拍賣合約,它應當在拍賣結束后 終止 —— 假設我們不需要在鏈上保存拍賣的歷史記錄。

在處理一個被銷毀的合約時,有一些需要注意的問題:

  • 合約銷毀后,發送給該合約的交易將失敗。
  • 任何發送給被銷毀合約的資金,都將永遠丟失。
  • 為避免資金損失,應當在發送資金前確保目標合約仍然存在,移除所有對已銷毀合約的引用。
contract SelfDesctructionContract {public address owner;public string someValue;modifier ownerRestricted {require(owner == msg.sender);_;} // constructorfunction SelfDesctructionContract() {owner = msg.sender;}// a simple setter functionfunction setSomeValue(string value){someValue = value;} // you can call it anything you wantfunction destroyContract() ownerRestricted {suicide(owner);} }

2、工廠合約

工廠合約用于創建和部署“子”合約。

工廠用于存儲子合約的地址,以便在必要時提取使用。

  • 為什么不把它們存在Web應用數據庫里?
  • 將地址數據存在工廠合約里、存在區塊鏈上,更加安全不會丟失。
  • 需要跟蹤所有新 創建的子合約以便同步更新數據庫。

eg. 銷售資產并跟蹤這些資產(例如,誰是資產的所有者)。 需要向負責部署資產的 函數添加payable修飾符以便銷售資產。

contract CarShop {address[] carAssets;function createChildContract(string brand, string model) public payable {// insert check if the sent ether is enough to cover the car asset ...address newCarAsset = new CarAsset(brand, model, msg.sender); carAssets.push(newCarAsset); }function getDeployedChildContracts() public view returns (address[]) {return carAssets;} }contract CarAsset {string public brand;string public model;address public owner;function CarAsset(string _brand, string _model, address _owner) public {brand = _brand;model = _model;owner = _owner;} }

3、名稱注冊表

  • 其實就是一個字符串map一個struct對象。
  • 使用場景: 假設一個合約依賴很多個合約,如果將所有這些合約的地址寫在你的應用代碼中,如果這些合約的地址隨著時間的推移而變化,那該怎么辦?
contract NameRegistry {struct ContractDetails {address owner;address contractAddress;uint16 version;}mapping(string => ContractDetails) registry;function registerName(string name, address addr, uint16 ver) returns (bool) {// versions should start from 1require(ver >= 1);ContractDetails memory info = registry[name];require(info.owner == msg.sender);// create info if it doesn't exist in the registryif (info.contractAddress == address(0)) {info = ContractDetails({owner: msg.sender,contractAddress: addr,version: ver});} else {info.version = ver;info.contractAddress = addr;}// update record in the registryregistry[name] = info;return true;}function getContractDetails(string name) constant returns(address, uint16) {return (registry[name].contractAddress, registry[name].version);} }

4、映射表迭代器

由于mapping迭代效率低,所以需要一個mapping迭代模式,答案就是通過一個數組來保存key。

注意:put()函數的一個常見錯誤“通過遍歷來檢查指定的鍵是否存在”。

contract MappingIterator {mapping(string => address) elements;string[] keys;function put(string key, address addr) returns (bool) {bool exists = elements[key] == address(0)if (!exists) {keys.push(key);}elements[key] = addr;return true;}function getKeyCount() constant returns (uint) {return keys.length;}function getElementAtIndex(uint index) returns (address) {return elements[keys[index]];}function getElement(string name) returns (address) {return elements[name];} }

5. 提款模式

簡單來說,就是不用transfer,而是用send,因為一旦callback錯誤,transfer會導致異常,而send不會。

contract WithdrawalContract {mapping(address => uint) buyers;function buy() payable {require(msg.value > 0);buyers[msg.sender] = msg.value;}function withdraw() {uint amount = buyers[msg.sender];require(amount > 0);buyers[msg.sender] = 0; require(msg.sender.send(amount));} }

總結

以上是生活随笔為你收集整理的以太坊知识教程------智能合约的5种设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天天色天天色天天色 | av男人网 | 不卡中文字幕 | 青青草免费公开视频 | 欧美一道本 | 成人黄色片免费看 | 久久这里只有精品8 | 国产成人 综合 亚洲 | 日韩av一区二区三区在线 | 成人免费播放 | 日韩爱爱片 | 国产精品福利一区二区三区 | av在线网址观看 | 懂色一区二区三区免费观看 | 手机在线永久免费观看av片 | 黄色免费在线网站 | 国产白浆在线 | 性日韩 | 奇米影视大全 | 美女福利片 | 国产成人精品综合久久久久99 | aaa欧美| 亚洲精品国产精 | 一区二区三区免费观看视频 | 农村末发育av片一区二区 | 色婷婷午夜 | 靠逼网站在线观看 | 日韩免费在线播放 | 让人下面流水的视频 | 日日摸天天爽天天爽视频 | 91传媒视频在线观看 | 好吊妞这里只有精品 | 久久黄色免费视频 | 秋葵视频污| www.成人在线 | 99久久婷婷国产综合精品电影 | 亚洲精品视频久久久 | 草草影院在线观看 | 亚洲精品中文字幕在线观看 | 欧美福利网 | av一级在线| 521av在线| 啪啪精品 | 波多av| 99激情视频 | 人妻精品久久久久中文字幕 | 亚洲图区欧美 | 国产91精品看黄网站在线观看 | 精品人妻人伦一区二区有限公司 | 精品欧美一区二区久久久久 | 免费日批网站 | 无码 人妻 在线 视频 | 精品乱码一区二区三区四区 | 欧美大色一区 | 日皮视频免费看 | 人人草超碰 | 久久亚洲一区二区三区四区 | 91精品国产综合久久久蜜臀九色 | 久久久午夜精品 | 爱情岛论坛永久入址测速 | 曰韩在线 | 青青在线精品 | 国产精品精品 | 淫欲av | 美攻壮受大胸奶汁(高h) | 欧美激情精品 | 日本一区视频在线播放 | 午夜影院在线 | 玖玖在线视频 | 国产一线二线在线观看 | www.com捏胸挤出奶 | 国产91av在线播放 | 二区三区在线视频 | 黄色av网站免费观看 | 在线亚洲区 | 青青草视频免费观看 | 国产午夜精品一区二区三区四区 | 久久亚洲a v | 日本成人免费在线视频 | 午夜性视频| 天天射网站 | 正在播放一区二区 | 一级欧美日韩 | 日韩精品1| 日韩 在线 | 欧美一级日韩一级 | av手机在线观看 | 亚洲欧洲免费视频 | 亚洲福利视频一区 | 超碰97人人爱 | 精品盗摄一区二区三区 | 91超碰在线免费观看 | 色香蕉在线 | 亚洲网站在线免费观看 | 一区二区三区视频免费在线观看 | 在线视频a | 香蕉日日| 日本xxxxxxxxx69 | 国产成人8x视频一区二区 |