Last active
April 5, 2019 01:27
-
-
Save Arachnid/3ab69c4e1d7943073b69451359426ddc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
contract UserTokenFactory { | |
mapping(address=>UserToken) public userTokens; | |
function getUserToken(address owner) returns(UserToken) { | |
if(userTokens[owner] == 0) { | |
UserToken token = new UserToken(owner); | |
userTokens[owner] = token; | |
} | |
return userTokens[owner]; | |
} | |
contract UserToken { | |
UserTokenFactory factory; | |
address public owner; | |
mapping(uint256=>uint256) public balances; | |
uint nonce; | |
event TokenIssued(uint256 tokenId, uint256 quantity); | |
constructor(address _owner) { | |
owner = _owner; | |
factory = msg.sender; | |
} | |
function issue(uint256 amount) returns(uint256) { | |
uint256 tokenId = keccak256(abi.encodePacked(owner, nonce++)); | |
tokens[tokenId] = amount; | |
return tokenId; | |
} | |
function transfer(address recipient, uint256 tokenId, uint256 amount) { | |
require(owner == msg.sender); | |
require(balances[tokenId] >= amount); | |
balances[tokenId] -= amount; | |
UserToken recipient = factory.getUserToken(recipient); | |
recipient.recieve(tokenId, amount); | |
} | |
function receive(uint256 tokenId, uint256 amount) { | |
UserToken sender = UserToken(msg.sender); | |
require(factory.userTokens[sender.owner] == msg.sender); | |
require(balances[tokenId] + amount >= amount); | |
balances[tokenId] += amount; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment