Add proper Token contract

This commit is contained in:
bumi 2018-03-15 08:55:17 +01:00
parent 68fb8b2bee
commit f0211ff4c1
10 changed files with 130 additions and 52 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
build build
node_modules

33
contracts/Token.sol Normal file
View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -1,11 +0,0 @@
pragma solidity ^0.4.4;
import './Token1.sol';
contract Token2 is Token1 {
function mint() public {
value += 20;
}
}

View File

@ -52,6 +52,11 @@ contract Registry is IRegistry {
ProxyImplementationUpgraded(name, version); ProxyImplementationUpgraded(name, version);
} }
function upgradeToLatest(bytes32 name) public {
uint current = currentVersions[name];
upgrade(name, current);
}
/** /**
* @dev Creates an upgradeable proxy * @dev Creates an upgradeable proxy
* @param name of the contract * @param name of the contract

View File

@ -25,12 +25,4 @@ contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage {
_implementation = registry.getVersion(_proxiedContractName, _version); _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);
}
} }

View File

@ -1,5 +1,5 @@
var Registry = artifacts.require('./Registry.sol'); var Registry = artifacts.require('./Registry.sol');
var Token = artifacts.require('./Token1.sol'); var Token = artifacts.require('./Token.sol');
module.exports = function(deployer) { module.exports = function(deployer) {
deployer.deploy(Token).then(function(token) { deployer.deploy(Token).then(function(token) {

View File

@ -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);
});
})
};

64
package-lock.json generated Normal file
View File

@ -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"
}
}
}
}

25
package.json Normal file
View File

@ -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"
}
}