From f0211ff4c1b6ce1a05558d7131322fd6ef0eb7f0 Mon Sep 17 00:00:00 2001 From: bumi Date: Thu, 15 Mar 2018 08:55:17 +0100 Subject: [PATCH] Add proper Token contract --- .gitignore | 3 +- contracts/Token.sol | 33 ++++++++++ contracts/Token1.sol | 17 ----- contracts/Token2.sol | 11 ---- contracts/upgradeable/Registry.sol | 5 ++ contracts/upgradeable/UpgradeabilityProxy.sol | 8 --- ...520798600_setup.js => 1520798600_token.js} | 2 +- migrations/1520802793_upgrade.js | 14 ---- package-lock.json | 64 +++++++++++++++++++ package.json | 25 ++++++++ 10 files changed, 130 insertions(+), 52 deletions(-) create mode 100644 contracts/Token.sol delete mode 100644 contracts/Token1.sol delete mode 100644 contracts/Token2.sol rename migrations/{1520798600_setup.js => 1520798600_token.js} (88%) delete mode 100644 migrations/1520802793_upgrade.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index c795b05..48912d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -build \ No newline at end of file +build +node_modules \ No newline at end of file diff --git a/contracts/Token.sol b/contracts/Token.sol new file mode 100644 index 0000000..b452f0b --- /dev/null +++ b/contracts/Token.sol @@ -0,0 +1,33 @@ +pragma solidity ^0.4.18; + +import 'zeppelin-solidity/contracts/token/ERC20/BasicToken.sol'; +import './upgradeable/Upgradeable.sol'; + +contract Token is Upgradeable, BasicToken { + string public name; + string public symbol; + uint8 public decimals; + + event LogMint(address indexed recipient, uint256 amount, string reference); + + modifier requireRegistry() { + require(address(registry) != 0x0); + _; + } + + function initialize(address sender) public payable { + require(msg.sender == address(registry)); + name = 'Kredits'; + symbol = 'K'; + decimals = 18; + } + + function mintFor(address _recipient, uint256 _amount, string _reference) requireRegistry returns (bool success) { + totalSupply_ = totalSupply_.add(_amount); + balances[_recipient] = balances[_recipient].add(_amount); + + LogMint(_recipient, _amount, _reference); + return true; + } + +} diff --git a/contracts/Token1.sol b/contracts/Token1.sol deleted file mode 100644 index 6dfc6d3..0000000 --- a/contracts/Token1.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.4.4; - -import './upgradeable/Upgradeable.sol'; - -contract Token1 is Upgradeable { - - uint public value = 0; - - function mint() public { - value += 10; - } - - function initialize(address sender) public payable { - value = 1; - } - -} diff --git a/contracts/Token2.sol b/contracts/Token2.sol deleted file mode 100644 index a8d6490..0000000 --- a/contracts/Token2.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity ^0.4.4; - -import './Token1.sol'; - -contract Token2 is Token1 { - - function mint() public { - value += 20; - } - -} diff --git a/contracts/upgradeable/Registry.sol b/contracts/upgradeable/Registry.sol index 46781a1..07dcad2 100644 --- a/contracts/upgradeable/Registry.sol +++ b/contracts/upgradeable/Registry.sol @@ -52,6 +52,11 @@ contract Registry is IRegistry { ProxyImplementationUpgraded(name, version); } + function upgradeToLatest(bytes32 name) public { + uint current = currentVersions[name]; + upgrade(name, current); + } + /** * @dev Creates an upgradeable proxy * @param name of the contract diff --git a/contracts/upgradeable/UpgradeabilityProxy.sol b/contracts/upgradeable/UpgradeabilityProxy.sol index ca75b25..be8fb6f 100644 --- a/contracts/upgradeable/UpgradeabilityProxy.sol +++ b/contracts/upgradeable/UpgradeabilityProxy.sol @@ -25,12 +25,4 @@ contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage { _implementation = registry.getVersion(_proxiedContractName, _version); } - /** - * @dev Upgrades the implementation to the latest version - */ - function upgradeToLatest() public { - require(msg.sender == address(registry)); - _implementation = registry.getLatestVersion(_proxiedContractName); - } - } diff --git a/migrations/1520798600_setup.js b/migrations/1520798600_token.js similarity index 88% rename from migrations/1520798600_setup.js rename to migrations/1520798600_token.js index 1271d2a..3ca0f26 100644 --- a/migrations/1520798600_setup.js +++ b/migrations/1520798600_token.js @@ -1,5 +1,5 @@ var Registry = artifacts.require('./Registry.sol'); -var Token = artifacts.require('./Token1.sol'); +var Token = artifacts.require('./Token.sol'); module.exports = function(deployer) { deployer.deploy(Token).then(function(token) { diff --git a/migrations/1520802793_upgrade.js b/migrations/1520802793_upgrade.js deleted file mode 100644 index c90a7fb..0000000 --- a/migrations/1520802793_upgrade.js +++ /dev/null @@ -1,14 +0,0 @@ -var Token = artifacts.require('./Token2.sol'); -var Registry = artifacts.require('./upgradeable/Registry'); -var UpgradeabilityProxy = artifacts.require('./upgradeable/UpgradeabilityProxy'); - -module.exports = function(deployer) { - deployer.deploy(Token).then(function(t) { - return Token.deployed(); - }).then(function(token) { - Registry.deployed().then(function(registry) { - console.log('Token address: ', Token.address); - registry.addVersion('Token', Token.address); - }); - }) -}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..525f605 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,64 @@ +{ + "name": "kredits-contracts", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" + }, + "ethjs-abi": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.2.1.tgz", + "integrity": "sha1-4KepOn6BFjqUR3utVu3lJKtt5TM=", + "requires": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + } + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha1-uvDA6MVK1ZA0R9+Wreekobynmko=" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "zeppelin-solidity": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.7.0.tgz", + "integrity": "sha512-tb2GsrdbWlPoZGwhd1uAN82L3BwkH+tjtbX9a4L+3SBcfKlkn3WzcMTeYVtiTA1S1LZEGQBGsEwqLQk5w/Y8cw==", + "requires": { + "dotenv": "4.0.0", + "ethjs-abi": "0.2.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3c043d1 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "kredits-contracts", + "version": "1.0.0", + "description": "Ethereum contracts and npm wrapper for Kredits", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/67P/truffle-kredits.git" + }, + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/67P/truffle-kredits/issues" + }, + "homepage": "https://github.com/67P/truffle-kredits#readme", + "dependencies": { + "zeppelin-solidity": "^1.7.0" + } +}