Contract-Design

ERC-20 代幣類似於獎勵積分:賺取和失去它們

  • December 13, 2020

我正在開發一個積分系統,我想用 ERC-20 代幣來做……

對我來說,將積分/令牌“分配”到執行某些任務的錢包地址都清楚,但是,我的業務規則也有“懲罰”,錢包地址應該失去積分/令牌……

我怎樣才能做到這一點?當我分發代幣時,它不能從第三方地址中“刪除”.. 對嗎?

你會怎麼辦?

謝謝

在我的頭上 - 你打算使用你的自定義 ERC20 代幣嗎?如果是,那麼只需在transfer方法中添加條件,讓使用者只轉移代幣不被鎖定(使用者沒有懲罰的代幣數量)。在每次轉移時,條件將檢查必鬚髮送的代幣數量是否等於或小於使用者解鎖餘額。

如果您使用的是已經部署的 ERC20 代幣,那麼您不能禁止使用者使用應該被禁止的代幣數量。您可以禁止代幣在另一個智能聯繫人中使用,但您不能禁止使用者將代幣從一個錢包地址發送到另一個錢包地址。

你必須分開你的擔憂。

一般來說,轉移的代幣是你無法控制的。因此,如果您想削減餘額,您應該在自己的合約中持有質押代幣,並將其視為內部會計問題,從功能depositwithdraw儲存合約負債的結構開始:

mapping(address => unit) public playerTokenBalances;

在這種簡單的模式中,您的合約中的代幣“正在發揮作用”,並且撤回的代幣安全地掌握在持有者手中 - 避免了大幅處罰的可能性。你不能編寫任何函式,未經同意就將代幣花在另一個錢包中。

將獎勵系統概念化可能就足夠了,這樣人們大部分時間都更願意將他們的代幣(索賠)留在你的契約中。而且,由於這是您的契約,因此這些餘額將受制於您的規則。

如果您發現這不足以滿足您的案例,那麼就有可能創建一個非標準的 ERC20 代幣合約來實現一些幕後邏輯。嚴格來說,ERC20 是一個標準介面和一組必須實現的最小行為,但不是可以存在的功能或合約內部展開的邏輯的限制。

這種特殊的實現會被非常仔細地考慮,所以通常最好選擇第一個選項。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/91056