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;
}
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.
Dein erstes Problem ist eigentlich gar kein Problem. Sie können keine "dezimalen" Ether senden, Ether sind immer in der Menge, wei
die 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 decimals
Definition 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
BENUTZERBILD