Solidity
可以將令牌儲存在 0x0 嗎?
出於安全原因,我想將代幣儲存在錢包以外的其他地方。我制定了一個投票系統合約,當超過 50% 的授權選民投票贊成時,合約會將有限數量的代幣從安全地址轉移到管理員錢包。因此,如果程式碼沒有被竊聽,幾乎不可能竊取代幣,因為它需要同時破解 2 個錢包(選民的錢包彼此不關聯)。
function sendTokens(address pAddress, uint pAmount) external onlyVotingContract { require(isAdmin(pAddress)); transferWorker(address(this), pAddress, pAmount); }
我的問題是,如果我將令牌儲存在 0x0 而不是地址(this),這可以成功嗎?我必須同步兩個合約以在建構子中設置相同的總代幣餘額地址,因此 0x0 將是最簡單的方法。
我認為這不會在不損害您的代幣合約的情況下起作用,因為沒有已知的方法可以從地址(0x0)簽署轉移。這將導致混亂的異常使其成為可能。
另一方面,如果投票合約是代幣何時釋放的仲裁者,那麼為什麼不讓它成為託管人呢?這將是我對這種事情的預設方法。這意味著代幣合約不會被修改,並且管理管理員退出能力的邏輯將在投票合約中明確定義。
TL; 博士
將受限制的代幣轉移到投票合約地址,並創建一個有條件地從投票到管理員轉移的功能。
希望能幫助到你。
與 Rob 的建議類似,您可以使用另一個合約作為保險庫來儲存代幣,直到滿足某些條件。
擁有保險庫合約可以靈活地添加額外的條件來釋放代幣,例如多重簽名批准或時間已過。
相反,您將有更多的程式碼要審計,但它應該比將所有程式碼都放在同一個合約中更容易審計。