Ethereum smart contract development
Mijn ervaring met het ontwikkelen van een smart contract op de Ethereum blockchain.
Er is een mooie online IDE om Ethereum smart contracts te maken.
https://remix.ethereum.org/
Ik ben begonnen met een simpele hello world:
https://www.geeksforgeeks.org/hello-world-smart-contract-in-remix-ide/
Toen een echte deploy naar het Kovan Testnetwerk via de MetaMask browser extensie.
Hier kan je gratis testnet ETH krijgen: https://faucet.kovan.network/
Handleiding om een eigen token te maken:
https://enlight.nyc/projects/ethereum-token
Toen OpenZeppelin ontdekt, die bieden allerlei standaard contracten aan, waar je makkelijk van kan overerven:
https://openzeppelin.com/contracts/
Code voor een eigen token is dan nog maar een paar regels. Hier maak ik mijn eigen Token met de naam Test en TST als symbool.
pragma solidity ^0.6.0;
import "https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/master/contracts/token/ERC20/ERC20.sol";
contract TestToken is ERC20 {
constructor(uint256 initialSupply) public ERC20("Test", "TST") {
_mint(msg.sender, initialSupply);
}
}
Vervolgens een heel simpel Airdrop contract gevonden op Redit.
https://www.reddit.com/r/ethdev/comments/7gc5u0/full_airdrop_solidity_code/
Een airdrop is niks anders dan tokens overmaken naar andere adressen, maar door dit in een batch via een contract te doen bespaar je GAS kosten.
contract Airdrop {
function drop(ERC20 token, address[] calldata recipients, uint256[] calldata values) public {
for (uint256 i = 0; i < recipients.length; i++) {
token.transfer(recipients[i], values[i]);
}
}
}
Ik heb 42 test tokens aangemaakt. Een deel daarvan naar het Aidrop contract verstuurd en toen weer een Airdrop gedaan naar mezelf. Dat werkt!
Daarna uiteraard nog het contract aanspreken via C#, dat kan met de Nethereum library.
Er is een mooie online playground: http://playground.nethereum.com/csharp/id/1001
var web3 = new Web3("https://kovan.infura.io/v3/7238211010344719ad14a89db874158c");
var balance = await web3.Eth.GetBalance.SendRequestAsync("0x92B143F46C3F8B4242bA85F800579cdF73882e98");