Truffle

代幣合約必須將所有代幣轉移到眾籌合約才能出售嗎?

  • October 24, 2018

我注意到在 Openzeppelin 中眾籌合約的標準測試中,他們將代幣從代幣合約轉移到眾籌合約:

context('once deployed', async function () {
     beforeEach(async function () {
       this.tokensale = await TokenSale.new(rate, wallet, this.token.address);
       await this.token.transfer(this.tokensale.address, tokenSupply);
     });

然而,其他範例不這樣做。所以我想知道為什麼這是必要的,如果內部CrowdSale合約使用代幣合約來發送代幣:

function _deliverTokens(
       address beneficiary,
       uint256 tokenAmount
   )
   internal
   {
       _token.safeTransfer(beneficiary, tokenAmount);
   }

上面的函式_token中就是Token合約的IERC20介面。有人可以比這個頁面更好地解釋一下嗎?

不需要在創建時將所有代幣發送到眾籌合約。你可以做任何最適合你的商業模式的事情。

例如,一個常見的場景是在銷售中出售 25% 的代幣並保留剩餘的代幣。在這種情況下,您將在眾籌合約中創建 25% 的代幣,在您自己的錢包中創建 75% 的代幣。

上面的合約按預期傳遞了代幣。_token.safeTransfer(beneficiary, tokenAmount);就是說這個合約會將代幣從這個合約轉移給受益人。該聲明的關鍵是代幣存在於眾籌合約中,否則safeTransfer()將拋出。正如您所提到的,_token是契約的 IERC20 介面。

您引用的測試是一個beforeEach函式,它在每次測試之前重置契約。這只是一種用代幣填充合約以進行測試的便捷方式。為該程式碼編寫的測試特定於令牌分發,因此發送所有令牌是可行的。

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