Wie erstellt man einen Smart Contract, der Token hat und Token an denjenigen überträgt, der Ether sendet?

Ich möchte einen intelligenten Vertrag erstellen, der in der Lage ist, Token zu erstellen, deren Preis bei einer bestimmten Menge Ether liegt, z uint price = 1 ether;. Nachdem nun jemand eine beliebige Menge Ether gesendet hat, wird die gleiche Menge an Token an das ETH-Konto des Absenders gesendet. Einige der Hauptprobleme sind
1. Da es keinen Mindestwert gibt, könnte der Absender Ether in Dezimalzahlen senden, also wie kann man ihn speichern und die Token in Dezimalzahlen senden?
2. Wie erstellt man Token innerhalb des Smart Contracts, ohne sie an den Eigentümer zu übertragen?
Ich habe bereits den Code zum Senden von Token gesehen, nachdem jemand Ether an den Smart Contract gesendet hat - Wie erstellt man einen Token Smart Contract, der Token sendet, nachdem er die Zahlung in Ether erhalten hat?
Außerdem habe ich den Code, um mein eigenes ERC-20-Token auszustellen -https://github.com/bitfwdcommunity/Issue-your-own-ERC20-token/blob/master/contracts/erc20_tutorial.sol
Ich bin ziemlich fortgeschritten in der Solidity-Plattform und lerne immer noch, also wird Hilfe sehr geschätzt.

Hier ist der Code zum Senden von Token nach Erhalt der Zahlung in Ether:-

uint256 public totalSupply;// total no of tokens in supply
uint remaining;
uint price;
mapping (address => uint) investors //it maps no of tokens given to each address

function token(uint _totalSupply) //constructor
{
totalSupply = _totalSupply;//set initial no of tokens in supply
remaining = 0;
}

function ()  payable// called when ether is send
{
assert(remaining < totalSupply);
uint noOfTokens = div(msg.value,price); // calculate no of tokens to be issued depending on the price and ether send
assert(noOfTokens < sub(totalSupply,remaining)); //no of tokens available should be greater than the one to be issued
add(investors[msg.sender],noOfTokens);
remaining = add(remaining,noOfTokens);
transfer(msg.sender, noOfTokens);

}

function setPrice(uint _price)
{ //  price need to be set maually as it cannot be done via ethereum network
price = _price;
}
wenn Sie mehr über das erc-20-Token erfahren möchten. dann würde ich Ihnen empfehlen, zu diesem github.com/OpenZeppelin/openzeppelin-solidity zu gehen , Sie können die uint8 private _decimals.in Ihrem Smart Contract hinzufügen. github.com/OpenZeppelin/openzeppelin-solidity/blob/master/… .oder Sie können die Rate Ihres Tokens speziell für die Benutzer ändern. und für den zweiten Teil können Sie ein weiteres Konto mit dem Namen Wallet erstellen und dann das Geld auf dieses Konto überweisen. Weitere Informationen dazu finden Sie unter rückzahlbare Verträge, die dazu ein Soft-Cap-System verwenden

Antworten (3)

Eine andere Möglichkeit, einen sicheren Vertrag zu erstellen, besteht darin , SafeBlocks Firewall hinzuzufügen . Damit können Sie Regeln und Limits erstellen, die Transaktionen in Echtzeit schützen.

Nie nach einem sicheren Vertrag gefragt. 😅

Dein erstes Problem ist eigentlich gar kein Problem. Sie können keine "dezimalen" Ether senden, Ether sind immer in der Menge, weidie die kleinste Einheit von Ether ist. Wenn also eine Funktion 56 Einheiten Ether erhält, bedeutet dies, dass sie 56 Weis Ether (0,000000000000000056 Ether) erhält. Es ist unmöglich, Dezimalzahlen zu übertragen.

Wenn Ihnen also jemand eine beliebige Menge Weis sendet, gehe ich davon aus, dass Sie ihm die gleiche Menge an Token senden möchten.

Token werden auch immer in ganzzahligen Einheiten übertragen, nicht in Dezimalzahlen. Der einzige Unterschied ist die decimalsDefinition Ihres Tokens, die angibt, wie viele Dezimalstellen Ihre Tokens haben. Wenn Sie dasselbe (18) wie Ether verwenden, sind Ihre Konvertierungen trivial - 1 Wei für 1 Token. Mehr über Dezimalzahlen können Sie zum Beispiel hier lesen: Ethereum-Token und Dezimalzahlen

Nun, was Ihre zweite Frage betrifft, es hängt davon ab, wie sich der Token-Vertrag verhalten soll. Sie haben zwei mögliche Vorgehensweisen:

1) Wenn Sie ein statisches Gesamtangebot haben (es ändert sich nie), dann gehören alle Token normalerweise zunächst dem Token-Vertrag. Wenn also jemand Token kauft, übertragen Sie diese von der Token-Menge des Vertrags

2) Wenn Sie Token spontan erstellen möchten, wann immer jemand sie kauft (nicht festes Gesamtangebot, genannt minting), können Sie sich verschiedene Minting-Implementierungen ansehen. Im Grunde erstellen sie bei Bedarf nur Token aus dem Nichts (aus dem Nichts). Wenn also jemand Ihrem Vertrag Ether (Weis) sendet, prägt der Vertrag Token nach Bedarf, erhöht das Gesamtangebot und überträgt diese Token an den Käufer.

Ich glaube, der beste Schritt ist, einen der bestehenden zuverlässigen Crowdsale-Verträge auszuwählen und ihn entweder so zu verwenden, wie er ist, oder ihn zu übernehmen und ein Minimum an Änderungen hinzuzufügen. Überprüfen Sie https://github.com/OpenZeppelin/openzeppelin-solidity/tree/master/contracts/crowdsale und wählen Sie aus, was am besten zu Ihnen passt. Wenn Sie Ihre Token prägen möchten, wenn Sie Ether von Teilnehmern erhalten, dann ist MintedCrowdsale.sol Ihr Ding

Ja, ich habe den Crowdsale-Vertrag überprüft, ich habe den Crowdsale-Vertrag bereitgestellt, trotzdem bleibt ein Fehler bestehen! Hier ist der Link zum neuen Beitrag - Was ist falsch an diesem Code, der bereitgestellt wird, aber beim Senden von Ether einen Fehler anzeigt?