日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 介 紹 在寫(xiě)智能合約時(shí),我傾向于采取引導(dǎo)方式。即使它們旨在用于生產(chǎn)環(huán)境,我也使它們盡可能易于理解。我寫(xiě)的智能合約是可重用的,但是通常會(huì)針對(duì)每個(gè)特定的業(yè)務(wù)案例重新編寫(xiě)智能合約。 在

介 紹

在寫(xiě)智能合約時(shí),我傾向于采取引導(dǎo)方式。即使它們旨在用于生產(chǎn)環(huán)境,我也使它們盡可能易于理解。我寫(xiě)的智能合約是可重用的,但是通常會(huì)針對(duì)每個(gè)特定的業(yè)務(wù)案例重新編寫(xiě)智能合約。

在本文中,我將討論solidity智能合約中的三種許可方法。討論這些方法的復(fù)雜性從高到低,這是您在項(xiàng)目中應(yīng)考慮的順序。 我提供了可用于每種方法的代碼。

本文假定您可以輕松地編寫(xiě)智能合約,并使用繼承和傳遞合約地址等功能作為參數(shù)。

簡(jiǎn)單方法— Ownable.sol

OpenZeppelin的Ownable.sol合同必須是最重用的合同之一。它在77行中實(shí)現(xiàn):

1. 斷言某人是智能合約所有者的邏輯。

2. 限制函數(shù)調(diào)用以繼承智能合約的所有者的邏輯。

3. 將所有權(quán)轉(zhuǎn)移到其他地址的邏輯。

在編寫(xiě)智能合約時(shí),您會(huì)經(jīng)常從Ownable繼承。讓我們來(lái)看一個(gè)如何使用Ownable的示例。想象一下,您想在智能合約中保留一個(gè)地址列表,但是您想成為唯一可以添加更多地址的列表??梢詫⑵湟暈槟湃蔚娜说淖?cè)表。您可以執(zhí)行以下操作:

contract Whitelist is Ownable {

mapping (address =》 bool) members;

constructor() public Ownable() {

}

function addMember(address _member)

public

onlyOwner

{

members[_member] = true;

}

}

從Ownable繼承并在您的Ownable上調(diào)用其構(gòu)造函數(shù)可確保將部署智能合約的地址注冊(cè)為所有者。如果未通過(guò)注冊(cè)為所有者的地址調(diào)用,則onlyOwner修飾符會(huì)使函數(shù)恢復(fù)。

部署此智能合約后,只有您或您指定的人可以將新成員添加到其中的列表中。

盡管有用,但很多時(shí)候Ownable還不夠。 在給定時(shí)間只有一個(gè)地址可以成為所有者,只有所有者可以決定誰(shuí)可以成為新所有者,您只能檢查您是否是所有者,而不是其他人。

中級(jí)復(fù)雜方法— Whitelist.sol

Whitelist.sol保留一個(gè)地址列表,然后可用于限制功能或任何其他目的。它在功能上與OpenZeppelin的Roles.sol非常相似,盡管有一些重要差異。

Whitelist.sol僅具有三個(gè)功能:

funcTIon isMember(address _member) public view returns(bool);

funcTIon addMember(address _member) public onlyOwner;

funcTIon removeMember(address _member) public onlyOwner;

例如通過(guò)該智能合約,您可以保留一份已批準(zhǔn)的利益相關(guān)者列表,這些利益相關(guān)者可能是令牌轉(zhuǎn)移的唯一接收者。 您可以執(zhí)行以下操作:

pragma solidity ^0.5.0;

import “@openzeppelin/contracts/token/ERC20/ERC20.sol”;

import “。./access/Whitelist.sol”;

contract ERC20Whitelisted is ERC20 {

Whitelist whitelist;

constructor(address _whitelistAddress) public {

whitelist = Whitelist(_whitelistAddress);

}

funcTIon transfer(address account, uint256 amount) public {

require(whitelist.isMember(account), “Account not whitelisted.”);

super._transfer(account, amount);

}

}

在上面的示例中,您還可以使ERC20Whitelisted繼承自ERC20和Whitelist。 我很樂(lè)意討論一些折衷方案。

簡(jiǎn)單的白名單功能可能非常強(qiáng)大。OpenZeppelin使用它們實(shí)現(xiàn)了許多ERC20和ERC721變體,并設(shè)法提供了超出我們大多數(shù)人所需的更多功能。在TechHQ,我們也僅使用白名單實(shí)施了CementDAO。

但是有時(shí)候,白名單也會(huì)落空。您可能需要有多個(gè)所有者才能擁有白名單?;蛘吣赡苄枰芾碓S多重疊的白名單。對(duì)于這些情況,我們具有分層的角色合約。

高級(jí)復(fù)雜方法-RBAC.sol

我們開(kāi)發(fā)了RBAC.sol,旨在提供與現(xiàn)代共享系統(tǒng)一樣的多用戶(hù)功能。

1. 有些角色不過(guò)是地址組。

2. 組成員資格只能由某些管理員角色的成員修改。

3. 可以在運(yùn)行時(shí)創(chuàng)建新角色。

4. 可以驗(yàn)證角色成員身份。

在低層,我們使用用戶(hù)選擇的bytes32參數(shù)來(lái)標(biāo)識(shí)角色。 通常,這些是可識(shí)別的短字符串,但是您也可以使用加密的值或地址。

角色本身是一組成員地址和admin角色的標(biāo)識(shí)符。 有趣的是,我們不需要將角色的標(biāo)識(shí)符存儲(chǔ)在其自己的結(jié)構(gòu)中。

struct Role {

bytes32 adminRoleId;

mapping (address =》 bool) members;

}

現(xiàn)在有兩種方法可以添加新角色并驗(yàn)證角色是否存在:

function roleExists(bytes32 _roleId) public view returns(bool);

function addRole(bytes32 _roleId, bytes32 _adminRoleId) public;

并且管理成員的功能是相同的,只是現(xiàn)在必須指定相關(guān)角色:

function isMember(address _member, bytes32 _roleId) public view returns(bool);

function addMember(address _member, bytes32 _roleId) public;

function removeMember(address _member, bytes32 _roleId) public;

僅當(dāng)調(diào)用者屬于我們要添加成員的角色的管理員角色時(shí),addMember和removeMember才會(huì)成功。

僅當(dāng)調(diào)用者屬于將管理所創(chuàng)建角色的角色時(shí),addRole才會(huì)成功。

這些簡(jiǎn)單的規(guī)則將允許創(chuàng)建角色的層次結(jié)構(gòu),然后可將其用于實(shí)現(xiàn)具有不同權(quán)限級(jí)別或區(qū)域的復(fù)雜多用戶(hù)平臺(tái)。

進(jìn)階學(xué)習(xí)

為了進(jìn)一步深入兔子洞,我建議從OpenZeppelin的這個(gè)問(wèn)題開(kāi)始。他們的代碼庫(kù)與我們的代碼庫(kù)沒(méi)有什么不同,即使在我們選擇采用其他方法的情況下,您也會(huì)發(fā)現(xiàn)大多數(shù)設(shè)計(jì)決策的透徹推理。他們?cè)谥T如ERC20Mintable之類(lèi)的合約中使用Roles是一個(gè)很好的例子,可以替代Whitelist。

勇敢者的另一個(gè)資源是AragonOS ACL合約。界面一眼就可以看出他們決定走得更遠(yuǎn):

function hasPermission(address who, address where, bytes32 what,

bytes how) public view returns (bool);

對(duì)于我們自己的@ hq20 / contracts包中的示例,我們使用本文中描述的三個(gè)級(jí)別的訪問(wèn)控制,因此,您也應(yīng)該注意這一點(diǎn)。

結(jié) 論

對(duì)于智能合約的實(shí)現(xiàn),最好僅實(shí)現(xiàn)所需的復(fù)雜性,而無(wú)需再實(shí)現(xiàn)任何復(fù)雜性。 在許可方面,存在三種不同的復(fù)雜性級(jí)別:

· 單用戶(hù)

· 用戶(hù)群

· 用戶(hù)組的層次結(jié)構(gòu)

您可以將Ownable.sol用于單個(gè)用戶(hù)允許的系統(tǒng)。 您可以將@ openzeppelin/Roles.sol或@ hq20/Whitelist.sol用于需要組中權(quán)限用戶(hù)的系統(tǒng)。對(duì)于需要組層次結(jié)構(gòu)的系統(tǒng),我們過(guò)去已成功使用@ hq20/RBAC.sol。

您將有自己的要求,并且需要權(quán)衡取舍。了解每個(gè)實(shí)現(xiàn)背后的設(shè)計(jì)決策將使您可以使用現(xiàn)有合約,也可以修改合約以供自己使用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶(hù)體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(chē)(EV)作為新能源汽車(chē)的重要代表,正逐漸成為全球汽車(chē)產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車(chē)的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車(chē)的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車(chē) 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車(chē)場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周?chē)娮釉O(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉