diff --git a/simulations/token_test/README.md b/simulations/token_test/README.md new file mode 100644 index 0000000000..1160be7a88 --- /dev/null +++ b/simulations/token_test/README.md @@ -0,0 +1,9 @@ +`npm install` +run `node deploy.js` to deploy the contract. + +this will log out a contract in the geth logs. + +set the ADDR environment variable to this contract address. +ie `export ADDR=` + +then run `node calltx.js` diff --git a/simulations/token_test/calltx.js b/simulations/token_test/calltx.js new file mode 100644 index 0000000000..f5b5896bd9 --- /dev/null +++ b/simulations/token_test/calltx.js @@ -0,0 +1,9 @@ +var Web3 = require('web3') +var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545")); +var contract_address = process.env.ADDR + +var mytokenContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]).at(contract_address) + +console.log(mytokenContract.balanceOf('0x43EC6d0942f7fAeF069F7F63D0384a27f529B062')) + +mytokenContract.transfer.sendTransaction('0x9e602164C5826ebb5A6B68E4AFD9Cd466043dc4A', 3, {from: '0x43EC6d0942f7fAeF069F7F63D0384a27f529B062', gas: 3000000}) diff --git a/simulations/token_test/deploy.js b/simulations/token_test/deploy.js new file mode 100644 index 0000000000..65290fec83 --- /dev/null +++ b/simulations/token_test/deploy.js @@ -0,0 +1,17 @@ +var Web3 = require('web3') +var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545")); + +var initialSupply = 50000 +var mytokenContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]); +var mytoken = mytokenContract.new( + initialSupply, + { + from: web3.eth.accounts[0], + data: '0x608060405234801561001057600080fd5b5060405160208061033583398101806040528101908080519060200190929190505050806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550506102af806100866000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806370a0823114610051578063a9059cbb146100a8575b600080fd5b34801561005d57600080fd5b50610092600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100f5565b6040518082815260200191505060405180910390f35b3480156100b457600080fd5b506100f3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061010d565b005b60006020528060005260406000206000915090505481565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561015a57600080fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401101515156101e757600080fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505600a165627a7a72305820c12ed9899b0830fb3b1c8938b12a5e3ee651fb5e6febea7863ea990d72ab04420029', + gas: '4700000' + }, function (e, contract){ + console.log(e, contract); + if (typeof contract.address !== 'undefined') { + console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash); + } + }) diff --git a/simulations/token_test/package.json b/simulations/token_test/package.json new file mode 100644 index 0000000000..f91a027ade --- /dev/null +++ b/simulations/token_test/package.json @@ -0,0 +1,14 @@ +{ + "name": "token_contract", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "web3": "^0.20.5" + } +} diff --git a/simulations/token_test/token.sol b/simulations/token_test/token.sol new file mode 100644 index 0000000000..704e809d2a --- /dev/null +++ b/simulations/token_test/token.sol @@ -0,0 +1,21 @@ +pragma solidity ^0.4.20; + +contract MyToken { + /* This creates an array with all balances */ + mapping (address => uint256) public balanceOf; + + /* Initializes contract with initial supply tokens to the creator of the contract */ + function MyToken( + uint256 initialSupply + ) public { + balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens + } + + /* Send coins */ + function transfer(address _to, uint256 _value) public { + require(balanceOf[msg.sender] >= _value); // Check if the sender has enough + require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows + balanceOf[msg.sender] -= _value; // Subtract from the sender + balanceOf[_to] += _value; // Add the same to the recipient + } +}