小弟我剛開始學習solidity,想發行並傳送給別人一個無法轉移的幣,透過持有這個幣來證明身分。
我嘗試套用ERC20中的transfer來傳送給別人幣,然而使用ERC20似乎無法限制別人將收到的幣傳送給第三者。
所以想問問前輩們,有什麼方法可以實現限制轉移,或是有哪個ERC協定有類似的功能能參考嗎?
在transfer裡加上類似白名單的機制呀
在function裡面加上
require(msg.sender == 你的地址, "transfer is not allow");
當你在 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(非同質化代幣),藉此來區分同類型的代幣具有不同的性質。