iT邦幫忙

0

solidity如何給別人一個他無法轉移的幣,ERC協定中有哪個可以使用的嗎?

  • 分享至 

  • xImage

小弟我剛開始學習solidity,想發行並傳送給別人一個無法轉移的幣,透過持有這個幣來證明身分。

我嘗試套用ERC20中的transfer來傳送給別人幣,然而使用ERC20似乎無法限制別人將收到的幣傳送給第三者。

所以想問問前輩們,有什麼方法可以實現限制轉移,或是有哪個ERC協定有類似的功能能參考嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
jouabcd
iT邦新手 1 級 ‧ 2022-02-10 08:54:45

在transfer裡加上類似白名單的機制呀
在function裡面加上
require(msg.sender == 你的地址, "transfer is not allow");

jouabcd iT邦新手 1 級 ‧ 2022-02-10 11:20:17 檢舉

補充一下好了,想要證明身分,也可以發行NFT,也就是ERC721
這樣每個token都是獨一無二的,一樣可以在transfer加上不能轉移的機制

2
ALu
iT邦新手 3 級 ‧ 2022-02-21 13:33:17

當你在 ERC_20 的繼承合約裡面寫上 mint 的時候不要直接提供給消費者 interface 的 mint(),你需要自己寫一個 YourTokenMint() 來給 DAPP 或 Client 端做使用。

然後在裡面建立持有名單(也就是所謂的 WHITELIST)MAPPING,使用了 YourTokenMint() 的人都會被同時加入到白名單裡面,在這邊你需要保證 mint 你代幣的方法只有透過你提供的 DAPP 或 Client 端來 call YourTokenMint() 作為唯一途徑。(換句話說,你繼承了 OpenZeppelin 提供的那個 mint() 不該設為是 public 的)

當你在 transfer() 的時候也必須根據上述原理來做修改。但如此做只能限定不是在你白名單裡面的人無法獲得代幣。

也就是說如果有一個人他曾經在你的客戶端 YourTokenMint() 鑄造代幣,他也可以從 YourTokentransfer() 獲得別人給他的代幣。

因為這是同質化代幣的定義:我的此類型物質,可以換到任何相同類型的物質,而其價值、意義皆不變。

如果希望在代幣上刻上那個人的名子,你可能需要選擇 ERC-721 鑄造的 NFT(非同質化代幣),藉此來區分同類型的代幣具有不同的性質。

我要發表回答

立即登入回答