當(dāng)前位置:首頁(yè) > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] ERC-777是一種新的代幣合約標(biāo)準(zhǔn),解決了 ERC-20 的一些安全問(wèn)題,可以讓合約創(chuàng)建者、代幣持有者和受眾在無(wú)需更改代幣合約的情況下擴(kuò)展其功能。ERC-777 從 ERC-20 和 ERC-

ERC-777是一種新的代幣合約標(biāo)準(zhǔn),解決了 ERC-20 的一些安全問(wèn)題,可以讓合約創(chuàng)建者、代幣持有者和受眾在無(wú)需更改代幣合約的情況下擴(kuò)展其功能。ERC-777 從 ERC-20 和 ERC-223 等標(biāo)準(zhǔn)處汲取了很多想法,并在此基礎(chǔ)上發(fā)展成為新一代標(biāo)準(zhǔn),為開(kāi)發(fā)者和用戶提供了很多強(qiáng)大的特性。

本文主要介紹了代幣合約,并講解了 ERC-777 代幣合約的特性、功能和用途。請(qǐng)注意,本文不涉及 ERC-20 。如果你想了解關(guān)于 ERC-20 代幣合約的信息,可以看看另一篇文章(編者注:中譯本見(jiàn)文末超鏈接《理解ERC-20 token合約》)。

什么是代幣合約?

代幣合約指的是一個(gè)包含了一組賬戶地址及其對(duì)應(yīng)余額的智能合約,如下圖所示。余額表示由合約創(chuàng)建者定義的一種價(jià)值:代幣合約可以使用余額來(lái)表示實(shí)物、幣值或持幣者的聲譽(yù)。一個(gè)單位的余額就是我們通常所說(shuō)的代幣。

需要注意的是,一個(gè)最終用戶可能會(huì)擁有任意多個(gè)地址。造成這種情況的原因有很多,例如,用戶想把自己所持有的代幣分散到不同的邏輯賬戶(儲(chǔ)蓄、稅務(wù)、開(kāi)支等)中,或使用不同的賬戶來(lái)代表不同的來(lái)源(ICO、投資、服務(wù)費(fèi)支付等)。

每當(dāng)代幣從一個(gè)賬戶轉(zhuǎn)移到另一個(gè)賬戶,代幣合約就會(huì)更新這兩個(gè)賬戶的余額。例如,從 0x2299…3ab7 向 0x1f59…3492 轉(zhuǎn)移 10 個(gè)代幣之后,余額更新情況如下表所示:

可以通過(guò)鑄成新的代幣來(lái)增加其總供應(yīng)量(通常是代幣合約所有者的功能)。例如,在 0x4ba5..ae22 中鑄成 100 個(gè)代幣,則余額的更新情況如下表所示:

代幣的總供給量可以通過(guò)銷毀已有代幣來(lái)減少(如果合約允許的話,任何代幣持有者都可以銷毀代幣)。例如,0x4919…413d 銷毀了 50 個(gè)代幣之后,余額的變化情況如下表所示:

簡(jiǎn)單的代幣合約會(huì)將上述信息保存在地址與余額的映射表中。如果是在更復(fù)雜的場(chǎng)景下,如分紅等,通常會(huì)另外采用更加強(qiáng)大的結(jié)構(gòu)。然而,無(wú)論具體的實(shí)現(xiàn)細(xì)節(jié)如何,代幣余額情況始終如上文的圖表所示。

ERC-777 代幣合約的運(yùn)營(yíng)者

ERC-777 代幣合約引入了 運(yùn)營(yíng)者 的概念。運(yùn)營(yíng)者是代表代幣持有者進(jìn)行操作的第三方,可以將代幣從持有者的地址轉(zhuǎn)移出來(lái)。請(qǐng)注意,由于運(yùn)營(yíng)者擁有很大權(quán)力,應(yīng)該謹(jǐn)慎添加。

每個(gè)地址都包含一個(gè)經(jīng)授權(quán)的運(yùn)營(yíng)者列表,如上表所示:

如上表所示,代幣持有地址 0x1f59…3492 擁有兩個(gè)運(yùn)營(yíng)者,其他兩個(gè)地址各自擁有一個(gè)運(yùn)營(yíng)者。當(dāng)然了,沒(méi)有運(yùn)營(yíng)者的地址也是有效的。

使用運(yùn)營(yíng)者的一個(gè)簡(jiǎn)單例子是,用戶在多個(gè)地址代幣上都有代幣,必須分別管理這些地址。在一般情況下,在將代幣從一個(gè)地址發(fā)送到另一個(gè)地址之前,要先確保發(fā)送者的地址內(nèi)有一筆 ETH ,足以用來(lái)支付 gas 費(fèi)用。因此,在將 ETH 從一個(gè)賬戶發(fā)送到另一個(gè)賬戶之時(shí),發(fā)送者需要先完成幾個(gè)交易,如下圖所示:

如上圖所示,地址 0x93f1…1b09 先向地址 0x1f59…3492 發(fā)送 ETH ,等待該交易完成后,地址 0x1f59…3492 向 0x4ba5…ae22 發(fā)送代幣。如此繁多的步驟既降低了用戶體驗(yàn),又加大了網(wǎng)絡(luò)負(fù)載量。

有了運(yùn)營(yíng)者之后,只要一個(gè)賬戶里有 ETH ,其他賬戶里有其他代幣,即可由持有 ETH 的賬戶進(jìn)行代幣轉(zhuǎn)賬。接著上一個(gè)例子往下看,如果把 0x93f1…1b09 作為 0x1f59…3492 的運(yùn)營(yíng)者,那么由 0x1f59…3492 向 0x4ba5…ae22 發(fā)送代幣的過(guò)程就可以簡(jiǎn)化為:

這就大大降低了用戶的負(fù)擔(dān)。此外,這可以讓用戶在通過(guò)一個(gè)運(yùn)營(yíng)者賬戶控制 ETH 資金的同時(shí),確保其代幣分散于多個(gè)持幣賬戶之中。

運(yùn)營(yíng)者也有可能是合約的形式(即 “代幣運(yùn)營(yíng)者合約”),而且在代幣合約創(chuàng)建的時(shí)候就可以為所有持幣者預(yù)先定義好代幣運(yùn)營(yíng)者合約。這樣一來(lái),運(yùn)營(yíng)者可以為所有持幣用戶提供服務(wù),同時(shí)其功能又被限制在智能合約的功能范圍內(nèi),代幣合約就可以不費(fèi)吹灰之力地為持有者提供更多功能。后文將詳細(xì)闡述代幣合約運(yùn)營(yíng)者擁有哪些權(quán)力。

ERC-777 代幣合約的定義

每個(gè)部署到以太坊上的 ERC-777 代幣合約都會(huì)被分配一個(gè)地址,即代幣地址。這個(gè)代幣合約將會(huì)包含一些定義合約操作的參數(shù)。

首先要理解的是,由于代幣合約缺少一個(gè)中心化的注冊(cè)表,無(wú)法保證名稱或符號(hào)具有唯一性。這樣一來(lái),獲得并保有唯一身份的最佳方法就是公開(kāi)你的代幣合約。一旦你創(chuàng)建了一個(gè)代幣合約,就應(yīng)該把它添加到一些常用網(wǎng)站上,如 Etherscan、MyEtherWallet、MyCrypto 和 CoinMarketCap 等等,不過(guò)要確保遵守每個(gè)網(wǎng)站的要求,這樣你的提交得到接受的可能性才最大。

代幣合約的 name 就是用來(lái)指代合約本身的長(zhǎng)名稱,例如 “My token”。名稱的長(zhǎng)度并沒(méi)有限制,但是一些錢包應(yīng)用可能會(huì)將過(guò)長(zhǎng)的名稱截短,因此要將名稱的長(zhǎng)度控制在較短的范圍內(nèi)。

代幣合約的 symbol 就是用來(lái)指代合約本身的短符號(hào),例如 “MYT”。這個(gè)符號(hào)跟股票代碼差不多,雖然沒(méi)有長(zhǎng)度限制,但是通常都在 3 至 4 個(gè)字符左右。

Solidity(以太坊主要使用的編程語(yǔ)言)不支持小數(shù),但是可分割性對(duì)于代幣來(lái)說(shuō)是一個(gè)常見(jiàn)需求。ERC-777 采用的解決方案是,所有代幣的內(nèi)部所示數(shù)額均使用其實(shí)際數(shù)額的 1018 整數(shù)倍來(lái)表示。例如,終端用戶看到的 1.2345 代幣其實(shí)在內(nèi)部是用 1.2345×1018 來(lái)表示的。這樣一來(lái),即使一個(gè)代幣被分割成了 0.000000000000000001 ,在內(nèi)部也依舊是以整數(shù)表示的,如下表所示:

一些代幣合約的創(chuàng)建者可能不想讓他們的代幣分割得這么細(xì)。例如,有一名用戶創(chuàng)建了一個(gè)軟件許可證代幣合約,他可能不想看見(jiàn)一個(gè)完整的許可證被分割的情況。又或者,有一名用戶創(chuàng)建了一個(gè)黃金代幣合約,用 1 token 代表 1 Kg 黃金,他可能想將轉(zhuǎn)賬金額限制在 0.01 Kg 及以上。

代幣合約的 granularity(粒度) 是代幣內(nèi)部所示數(shù)額的最小可分割單位。緊接著上面的例子,許可證代幣的粒度應(yīng)當(dāng)是 1018 (因?yàn)?1018/ 1018 = 1),而黃金代幣的 粒度應(yīng)當(dāng)是 1016(因?yàn)?1016/1018 = 0.01)。

可以預(yù)期的是,絕大多數(shù)代幣合約的粒度都是 1 ,也就是說(shuō),這個(gè)代幣可以被分割成 1/1018 ,或是 0.000000000000000001 。根據(jù)上面給出的例子,如果對(duì)代幣的可分割性有具體要求,可以選擇不同的粒度。

不妨來(lái)探究一下 ERC-777 的粒度和 ERC-20 的小數(shù)之間的區(qū)別。雖然二者的都可以實(shí)現(xiàn)代幣的可分割性,ERC-20 是基于具體的值來(lái)移動(dòng)小數(shù)點(diǎn)的位置,而 ERC-777 的小數(shù)點(diǎn)位置是固定的。這樣一來(lái),ERC-777 代幣的值就更容易在用戶界面上顯示,因?yàn)樾?shù)點(diǎn)的位置始終是固定的,只是去掉了后面一連串的 0 。

ERC-777 代幣合約的功能

ERC-777 代幣合約具有很多功能,可以讓用戶查找賬戶余額,并且在不同條件下將代幣從一個(gè)賬戶轉(zhuǎn)到另一個(gè)賬戶上。這些函數(shù)的詳情如下。

totalSupply()函數(shù)說(shuō)明了所有地址持有的代幣總量。如果有新的代幣被鑄造出來(lái),這個(gè)值就會(huì)增加,如果已有的代幣被銷毀,這個(gè)值就會(huì)減少。

balanceOf() 函數(shù)說(shuō)明了特定地址所持有的代幣數(shù)量。要注意的是,任何人都可以詢問(wèn)任意地址的余額,因?yàn)閰^(qū)塊鏈上的所有數(shù)據(jù)都是公開(kāi)的。

send()函數(shù)將一定數(shù)量的代幣從信息發(fā)送方的地址轉(zhuǎn)到另一個(gè)地址上。相比于 ERC-20 代幣,ERC-777 代幣的發(fā)送功能更完善,詳情見(jiàn)后文。

burn() 函數(shù)會(huì)銷毀信息發(fā)送方所持有的一部分代幣。相比于 ERC-20 代幣,ERC-777 代幣的銷毀功能更完善,詳情見(jiàn)后文。

authorizeOperator() 函數(shù)允許消息發(fā)送方將自己的代幣授權(quán)給另一個(gè)地址(譯者注:即給運(yùn)營(yíng)者授權(quán))。

revokeOperator() 函數(shù)可以將撤銷現(xiàn)有運(yùn)營(yíng)者控制消息發(fā)送方代幣的權(quán)限。

isOperatorFor() 說(shuō)明了某個(gè)地址是否是某個(gè)代幣持有者的運(yùn)營(yíng)者。

只要發(fā)送方擁有某個(gè)賬戶的運(yùn)營(yíng)者權(quán)限,就可以通過(guò) operatorSend() 函數(shù)將一定數(shù)量的代幣從那個(gè)賬戶發(fā)送至另一個(gè)賬戶。

defaultOperators()函數(shù)提供了一個(gè)代幣運(yùn)營(yíng)者合約列表,列表中的運(yùn)營(yíng)者均已得到所有代幣的全部權(quán)限;關(guān)于這個(gè)功能,可以參見(jiàn)下文的 “代幣運(yùn)營(yíng)者合約” 一節(jié)。

ERC-777 代幣合約所涉及的事件

ERC-777 定義了一些事件,可以用來(lái)追蹤一個(gè)代幣合約的個(gè)體和整體信息。

一旦有新的代幣被鑄造出來(lái),就會(huì)觸發(fā)Minted() 事件。該事件包含了新鑄代幣的數(shù)量,及其目標(biāo)地址的信息。

一旦現(xiàn)有代幣被銷毀,就會(huì)觸發(fā) Burned() 事件。該事件包含了被銷毀代幣的數(shù)量及源地址的信息。

一旦有代幣從一個(gè)地址轉(zhuǎn)移到另一個(gè)地址,就會(huì)觸發(fā) Sent() 事件。該事件包含了被轉(zhuǎn)移代幣的數(shù)量,以及持有者地址和接收者地址的信息。

除了上述幾個(gè)事件之外,ERC-777 代幣標(biāo)準(zhǔn)還包含了兩個(gè)管理型事件。一旦用戶為己方地址添加了一個(gè)運(yùn)營(yíng)者,就會(huì)觸發(fā) AuthorizedOperator() 事件。一旦用戶將己方地址的某個(gè)運(yùn)營(yíng)者移除,就會(huì)觸發(fā) RevokedOperator() 事件。要注意的是,這些事件不會(huì)包含關(guān)于代幣數(shù)量和所有權(quán)變化的信息。

詳解 ERC-777 代幣合約的發(fā)送功能

將 ERC-777 代幣從一個(gè)地址發(fā)送到另一個(gè)地址需要經(jīng)過(guò)幾個(gè)步驟來(lái)完成。在這一流程,ERC-777 代幣標(biāo)準(zhǔn)在功能性和安全性上都展現(xiàn)出了優(yōu)越之處。

常見(jiàn)的代幣發(fā)送流程如下圖所示:

具體步驟如下:

· 驗(yàn)證:確保輸入?yún)?shù)是有效的,需驗(yàn)證該地址是否有足額代幣可用來(lái)發(fā)送,以及所發(fā)送數(shù)額是否是該代幣粒度的倍數(shù)

· 授權(quán):確保發(fā)送方有權(quán)發(fā)送代幣,發(fā)送方必須是這些代幣的持有者或是擁有對(duì)應(yīng)地址權(quán)限的運(yùn)營(yíng)者

· 發(fā)送:執(zhí)行代幣轉(zhuǎn)賬,更新代幣合約上每個(gè)地址的持幣信息

· 日志:發(fā)送包含所有操作細(xì)節(jié)的事件

ERC-777 在上述步驟的基礎(chǔ)上又新增了兩個(gè)步驟,如下圖所示:

可以看到,ERC-777 在常見(jiàn)流程中新增了 tokensToSend() 和 tokensReceived() 這兩個(gè)步驟。

tokensToSend() 的調(diào)用放在了驗(yàn)證交易信息以及完成授權(quán)之后,但是在更新合約地址的持幣信息之前。

tokensReceived() 的調(diào)用放在了更新合約地址的持幣信息之后。

乍一看,新增的步驟似乎沒(méi)有讓整個(gè)流程變得很復(fù)雜。但是, tokensToSend() 和 tokensReceived() 的強(qiáng)大之處在于,它們不是由合約地址定義的,而是分別位于代幣發(fā)送方和接收方的合約內(nèi)。由此一來(lái),發(fā)送方和接收方就有權(quán)決定是否要達(dá)成交易,還可以實(shí)現(xiàn)更高級(jí)的功能。

tokensToSend() 允許持幣者以 “在代幣離開(kāi)該賬戶之前” 的形式提供條件和操作。

tokensReceived() 允許代幣接收方以 “代幣何時(shí)到達(dá)該賬戶。..” 的形式提供條件和操作。

tokensToSend() 的目的

想象一個(gè)場(chǎng)景。假設(shè)有一家公司的首席財(cái)務(wù)官制定了多種貨幣資金的轉(zhuǎn)出規(guī)則。這個(gè)首席財(cái)務(wù)官允許財(cái)務(wù)經(jīng)理在遵守公司規(guī)則的情況下使用資金,同時(shí)保留對(duì)規(guī)則以及資金的控制權(quán),就如下圖所示:

如果這筆資金采用的是 ERC-777 代幣的形式,就可輕松實(shí)現(xiàn)上圖中的設(shè)置。需要執(zhí)行以下步驟:

1. 首席財(cái)務(wù)官制定的規(guī)則被編碼進(jìn)了一個(gè)代幣控制合約內(nèi),且該合約被應(yīng)用于該公司的持幣地址

2. 首席財(cái)務(wù)官授權(quán)財(cái)務(wù)經(jīng)理成為公司持幣地址的運(yùn)營(yíng)者

3. 財(cái)務(wù)經(jīng)理使用 operatorSend() 發(fā)送資金

首席財(cái)務(wù)官可以制定哪些規(guī)則?幾乎所有規(guī)則都可以被編碼進(jìn)智能合約內(nèi),下面舉了幾個(gè)例子:

· 只允許運(yùn)營(yíng)者花費(fèi)一定量的資金(代幣)

· 對(duì)運(yùn)營(yíng)者設(shè)置 每日/每周/每月 的支出限額

· 運(yùn)營(yíng)者只能向一組經(jīng)過(guò)授權(quán)的收款方發(fā)送資金

· 只有提供了對(duì)首席財(cái)務(wù)官批準(zhǔn)過(guò)的發(fā)票的引用,運(yùn)營(yíng)者才可以花費(fèi)這筆資金

· 等等

要留意的一點(diǎn)是,既可以針對(duì)公司所持有的不同種類的 ERC-777 代幣制定多套規(guī)則,也可以對(duì)多種 ERC-777 代幣實(shí)行同一套規(guī)則。這樣一來(lái),首席財(cái)務(wù)官就可以制定合乎自己公司情況的規(guī)則了,財(cái)務(wù)經(jīng)理也只能遵守這些規(guī)則。

同一個(gè)地址也可以擁有多個(gè)運(yùn)營(yíng)者。因此,如果財(cái)務(wù)經(jīng)理有代理人的話,只要其代理人也遵守同樣的規(guī)則(或其他規(guī)則),就有權(quán)訪問(wèn)這筆資金。

tokensToSend() 旨在通過(guò)對(duì)交易制定規(guī)則來(lái)控制一個(gè)或多個(gè)賬戶內(nèi)資金的轉(zhuǎn)出。說(shuō)白了,tokensToSend() 就是讓用戶把 “在代幣離開(kāi)我的賬戶之前。..” 這句話補(bǔ)充完整。這些規(guī)則是在代幣控制合約中定義的。同一個(gè)代幣控制合約可用于多個(gè) ERC-777 代幣合約,以及多個(gè)賬戶之間,從而保證各賬戶之間規(guī)則的統(tǒng)一。

tokensReceived() 的目的

與 tokensToSend() 類似,tokensReceived() 會(huì)收到代幣已轉(zhuǎn)入該賬戶的通知。接著上文的例子,該公司有一個(gè)會(huì)計(jì)部門負(fù)責(zé)付款。每次收到付款,都需要核對(duì)是否與發(fā)票相符,并且分配給公司內(nèi)部的部門。收到這筆資金之后,會(huì)計(jì)部門需要執(zhí)行以下步驟:

· 如果收到的資金帶有發(fā)票參考號(hào),則將其與發(fā)票進(jìn)行核對(duì),并記入相應(yīng)部門的貸方

· 如果收到的資金來(lái)自一個(gè)已知的發(fā)送方,則直接記入相應(yīng)部門的貸方

· 除上述情況之外,將資金存入持幣賬戶并進(jìn)行調(diào)查

就 tokensToSend() 而言,上述過(guò)程只是一個(gè)實(shí)例,它實(shí)際上可以描述一切規(guī)則。例如,提早付款可享折扣(推遲付款需額外收費(fèi)),只接受哪幾種貨幣,等等。這只需要一個(gè)步驟:

1.該部門的流程被編程進(jìn)了一個(gè)代幣控制合約,且該合約被應(yīng)用于該公司的收款地址

通常來(lái)說(shuō),tokensReceived() 之所以沒(méi)有 tokensToSend() 那么復(fù)雜,是因?yàn)閮蓚€(gè)原因。第一,tokensReceived() 通常只包含一個(gè)參與者(收款地址),而 tokensToSend() 會(huì)涉及運(yùn)營(yíng)者。第二,相比收款來(lái)說(shuō),用戶通常更關(guān)注付款。盡管如此,tokensReceived() 是一個(gè)非常強(qiáng)大的功能,可以幫助像交易所之類的大型組織來(lái)管理已收到的資金。

tokensReceived() 旨在通過(guò)對(duì)交易制定規(guī)則來(lái)控制進(jìn)入一個(gè)或多個(gè)賬戶的資金。說(shuō)白了,tokensReceived() 就是讓用戶把 “當(dāng)代幣進(jìn)入我的賬戶之時(shí)。..” 這句話補(bǔ)充完整。這些規(guī)則都是在代幣控制合約中定義的。同一個(gè)代幣控制合約可用于多個(gè) ERC-777 代幣合約,以及多個(gè)賬戶之間,從而保證各賬戶之間規(guī)則的統(tǒng)一。

對(duì) tokensToSend() 和 tokensReceived() 的要求

tokensToSend() 是可選項(xiàng);如果不選的話,就會(huì)按照常見(jiàn)流程發(fā)送代幣。tokensReceived() 也是可選的,除非收款賬戶是合約,在這種情況下就是強(qiáng)制的。強(qiáng)制所有收到代幣的合約執(zhí)行 tokensReceived() ,就可以確保代幣只會(huì)被發(fā)送到主動(dòng)說(shuō)明可以處理這這些代幣的合約處。這是 ERC-223 的主要目標(biāo)。除此之外, ERC-777 還實(shí)施了其他保障措施,就是強(qiáng)制收款方登記是否能夠接收 ERC-777 代幣和 ERC-1820 代幣。

代幣運(yùn)營(yíng)者合約

如上文所述,代幣運(yùn)營(yíng)者合約就是在 ERC-777 代幣合約上調(diào)用 operatorSend() 的合約。這類合約的強(qiáng)大之處就在于,它們能夠在不需要改變 ERC-777 代幣合約本身的情況下擴(kuò)展 ERC-777 的功能。

當(dāng)持幣者想要把代幣發(fā)送到另一個(gè)地址之時(shí),他會(huì)直接在該代幣合約上調(diào)用 send() ,如下圖所示:

但是,任何用戶也都可以通過(guò)調(diào)用代幣運(yùn)營(yíng)者合約來(lái)發(fā)送代幣。通過(guò)該合約,任何用戶都可以代表持有者發(fā)送代幣,如下圖所示:

在創(chuàng)建代幣合約之時(shí),就可為所有持有者都啟用代幣運(yùn)營(yíng)者合約(即 默認(rèn)運(yùn)營(yíng)者 ),或是在有需要的情況下,為個(gè)別持有者啟用該合約。

代幣持有者合約可以為代幣持有者提供額外的功能。例如,批量發(fā)送代幣是一大常見(jiàn)需求,但是沒(méi)有在 ERC-777 標(biāo)準(zhǔn)中注明。在部署 ERC-777 代幣合約之前,有可能會(huì)新增批量發(fā)送的功能,但是這樣會(huì)為代幣合約引入自定義屬性,因此更容易出現(xiàn)錯(cuò)誤。

另一種解決方案是,編寫一個(gè)可實(shí)現(xiàn)批量發(fā)送的獨(dú)立代幣運(yùn)營(yíng)者合約,并單獨(dú)進(jìn)行部署。這個(gè)代幣運(yùn)營(yíng)者合約可以接受來(lái)自持幣者的交易,并根據(jù)交易中所記錄的將哪種代幣發(fā)送給哪些收款方的細(xì)節(jié),反復(fù)調(diào)用 operatorSend() 來(lái)發(fā)送這些代幣。

為了實(shí)現(xiàn)批量轉(zhuǎn)賬的功能,在部署一個(gè)標(biāo)準(zhǔn) ERC-777 代幣合約的同時(shí)會(huì)指定一個(gè)批量發(fā)送運(yùn)營(yíng)者合約作為默認(rèn)的運(yùn)營(yíng)者。現(xiàn)在,任何持幣者都可以在代幣運(yùn)營(yíng)者合約上調(diào)用 send() 函數(shù),僅通過(guò)一個(gè)交易就可以將多種代幣從自己的賬戶上發(fā)送出去。如果代幣合約沒(méi)有注明將批量發(fā)送運(yùn)營(yíng)者合約作為默認(rèn)的運(yùn)營(yíng)者合約,則持幣者可以針對(duì)賬戶進(jìn)行自定義配置。

請(qǐng)注意,由上圖可見(jiàn),代幣運(yùn)營(yíng)者合約只有一個(gè)send() 函數(shù),但是復(fù)雜的代幣運(yùn)營(yíng)者合約可以有多個(gè) send() 函數(shù)。例如,一個(gè)批量發(fā)送代幣運(yùn)營(yíng)者合約可能具備以下功能,即,向多個(gè)收款方發(fā)送相同數(shù)量的代幣,向多個(gè)收款方發(fā)送不同數(shù)量的代幣,等等。

除了上述例子中提到的功能之外,調(diào)用代幣運(yùn)營(yíng)者合約的用戶也可以是除持幣者之外的人。讓外人代替持幣者發(fā)送代幣,這種做法可能聽(tīng)起來(lái)很危險(xiǎn),但實(shí)際上在很多場(chǎng)景下都非常有用。將持幣者和要求轉(zhuǎn)賬的用戶分開(kāi),就可以實(shí)現(xiàn)更多功能,例如:

· 在獲得持幣者授權(quán)的情況下發(fā)送代幣(“免手續(xù)費(fèi)轉(zhuǎn)賬”)

· 通過(guò)發(fā)送代幣來(lái)?yè)Q取其他代幣(例如,ICO、分布式交易)

· 一旦滿足特定條件,立即發(fā)送代幣(基于績(jī)效的獎(jiǎng)勵(lì)、根據(jù)時(shí)間定的代幣)

簡(jiǎn)言之,代幣運(yùn)營(yíng)者合約可以通過(guò)修改規(guī)則來(lái)規(guī)定代幣在何時(shí)可以從一個(gè)賬戶轉(zhuǎn)移到另一個(gè)賬戶。這是一個(gè)非常強(qiáng)大的功能,需要用戶充分信任代幣運(yùn)營(yíng)者合約??梢栽O(shè)想的是,以太坊主網(wǎng)上將會(huì)部署一些知名的代幣運(yùn)營(yíng)者合約,用來(lái)實(shí)現(xiàn)特定的功能。代幣合約創(chuàng)建者和個(gè)人持幣者通過(guò)選擇自己想要的代幣運(yùn)營(yíng)者合約就可以擴(kuò)展功能,從而提高代幣轉(zhuǎn)賬的效率和安全性。

在下一篇文章中,我們將更深入地探究代幣運(yùn)營(yíng)者合約。

代幣運(yùn)營(yíng)者合約和代幣控制合約之間的差別

乍一看,代幣運(yùn)營(yíng)者合約跟代幣控制合約中的 tokensToSend() 差異不大,其實(shí)二者還是有一些差別的。

代幣運(yùn)營(yíng)者合約是可選的;任何持幣者都可以忽視這個(gè)功能,直接調(diào)用 send() 。而代幣控制合約是強(qiáng)制性的,不能被忽視。

任何人都可以調(diào)用代幣運(yùn)營(yíng)者合約。代幣控制合約是作為 send() 和 operatorSend() 操作的一部分調(diào)用的,因此只能由持幣者(或該持幣者的運(yùn)營(yíng)者)調(diào)用。

一般而言,代幣運(yùn)營(yíng)者合約側(cè)重于擴(kuò)展代幣合約的功能。代幣控制合約則側(cè)重于控制來(lái)自賬戶的代幣流。

下表匯總了代幣運(yùn)營(yíng)者合約和代幣控制合約之間的不同點(diǎn):

與 ERC-20 的兼容性

敏銳的讀者可能已經(jīng)注意到了,雖然 ERC-20 和 ERC-777 提供的功能差不多,但是二者對(duì)這些功能的命名都不盡相同;ERC-20 使用的名稱是transfer()/approve()/transferFrom() ,而 ERC-777 使用的名稱是send()/operatorSend() 。這就意味著,同一個(gè)代幣合約有可能提供相同的 ERC-20 和 ERC-777 功能。ERC-777 標(biāo)準(zhǔn)中詳細(xì)說(shuō)明了具體的操作方式和觸發(fā)事件。

ERC-777 實(shí)現(xiàn)

ERC-777 帶有一個(gè)參考實(shí)現(xiàn),其中還包括了一個(gè)可兼容 ERC-20 標(biāo)準(zhǔn)的版本。代幣運(yùn)營(yíng)者合約和代幣控制合約的樣本可單獨(dú)獲得。

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉