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