Muss der Token-Vertrag alle Token an den Crowdsale-Vertrag übertragen, bevor er sie verkaufen kann?

Mir ist aufgefallen, dass bei den Standardtests für Crowdsale-Verträge in Openzeppelin die Token aus dem Token-Vertrag in den Crowdsale-Vertrag übertragen werden:

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);
      });

Andere Beispiele tun dies jedoch nicht . Ich frage mich also, warum dies notwendig ist, wenn der CrowdSaleVertrag intern den Token-Vertrag verwendet, um die Token zu senden:

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

In der obigen Funktion _tokenbefindet sich die IERC20-Schnittstelle des Token-Vertrags. Kann jemand das ein bisschen besser erklären als diese Seite ?

Antworten (1)

Es ist nicht erforderlich, alle Token bei der Erstellung an einen Crowdsale-Vertrag zu senden. Sie können tun, was am besten zu Ihrem Geschäftsmodell passt.

Ein gängiges Szenario ist beispielsweise, 25 % der Token im Verkauf zu verkaufen und den Rest zu behalten. In diesem Fall erstellen Sie 25 % der Token im Crowdsale-Vertrag und 75 % in Ihrem eigenen Wallet.

Der obige Vertrag liefert die Token wie erwartet. _token.safeTransfer(beneficiary, tokenAmount);bedeutet, dass dieser Vertrag Token aus diesem Vertrag an den Begünstigten überträgt. Der Schlüssel zu dieser Aussage ist, dass die Token im Crowdsale-Vertrag leben oder sonst safeTransfer()geworfen werden. Wie du schon erwähnt hast, _tokenist die IERC20 Schnittstelle zum Vertrag.

Der Test, auf den Sie verwiesen haben, ist eine beforeEachFunktion, die die Verträge vor jedem Test zurücksetzt . Dies ist einfach eine bequeme Möglichkeit, einen Vertrag mit Tokens zum Testen zu füllen. Die für diesen Code geschriebenen Tests sind spezifisch für die Tokenverteilung, daher ist es möglich, alle Token zu senden.