ICO-Funktionen und -Einschränkungen

Eine Sache, die ich zu verstehen versuche, ist die Einschränkung von Smart Contracts. Ich habe mich mit ICOs befasst und immer eine Frage gestellt:

Ist es möglich, eine „enterICO“-Funktion zu implementieren, ohne dass Benutzer die Funktion aufrufen müssen?

Ich versuche es mal an einem Beispiel aus dem Zusammenhang zu erklären:

pragma solidity ^0.4.17;

contract ICO {
    string message; /// just assume we have a function which allows us to set a message 

    function enterIco() payable public {
        if(msg.value == 0.00000001 ether)
        {
            return message; 
        }
    } 

}

Für diese Art von Beispiel können wir davon ausgehen, dass Sie am Frontend einige web3js haben, die es Ihnen ermöglichen, MetaMask auf der Benutzerseite zu verbinden und die enterIco-Funktion aufzurufen, wenn ein Benutzer auf die Schaltfläche klickt.

Können wir diese Funktion automatisch ausführen lassen, wenn der Benutzer keinen Zugriff auf die Schaltfläche hat? Der Benutzer sendet beispielsweise Ethereum von der eigenen Wallet an die Vertragsadresse, ohne auf die Schaltfläche zu klicken, und die Funktion wird automatisch ausgeführt.

Dieses Beispiel kann auf ICOs verwiesen werden. Könnte ein Benutzer seine Wallet- und Smart-Contract-Adresse verwenden, um am ICO teilzunehmen?

PS Ich weiß, dass ICOs nicht auf diese Weise implementiert werden sollten, weil sie KYC erfordern, aber ich bin neugierig zu wissen, ob sie könnten oder ob Solidität diese Art von Verhalten einschränkt.

Antworten (1)

Ja, das geht über die Fallback-Funktion.

Wenn ein Vertrag mit leeren Eingabedaten oder mit einer Funktionssignatur aufgerufen wird, die mit keiner Funktion des Vertrags übereinstimmt, wird die Fallback-Funktion ausgeführt. Sie können dann jede andere gewünschte Funktion in dieser Funktion aufrufen, etwa so:

function() public payable {
    enterICO();
}
Solidity beeindruckt mich jeden Tag mehr und mehr. Vielen Dank, ich möchte damit ein paar Tests machen!