智能合约-建立标准代币

终端输入testrpc启动以太坊开发环境,会生成10个钱包临时的地址和10个对应的钱包秘钥,部署合约需要花费以太币,每个钱包有10个以太币(不要关闭终端)

新建代币合约

truffle create contract EncryptedToken 命令创建EncryptedToken.sol合约。写入以下代码

pragma solidity ^0.4.4;

contract EncryptedToken {
uint256 INITIAL_SUPPLY = 666666; //代币初始值
mapping(address => uint256) balanses;
function EncryptedToken() {
// constructor
balanses[msg.sender] = INITIAL_SUPPLY;
}
//转账到一个指定的地址,钱包地址,转账数量
function transfer(address _to,uint256 _amount) {
assert(balanses[msg.sender] >= _amount);
balanses[msg.sender] -= _amount;
balanses[_to] += _amount;
}

//查看指定地址的余额
function blanxeOf(address _owner) constant returns (uint256) {
return balanses[_owner];
}
}

编译

truffle compile

部署

truffle migrate

与合约互动

truffle console

let contract

实例化合约并存储

EncryptedToken.deployed().then(instance=>contract=instance)

测试服务提供了10个钱包地址查看第一个地址

web3.eth.coinbase

或者

web3.eth.accounts[0]

默认币存在第一个钱包里面

查看钱包余额

contract.blanxeOf(web3.eth.accounts[0])

会输出

BigNumber { s: 1, e: 5, c: [ 666666 ] }  //s代表开始,e:代表结束加起来是这条数据的长度

从当前的合约中转账到第一钱包//默认的第一个钱包账号,部署到线上后哪个钱包地址部署的就是哪一个地址

contract.transfer(web3.eth.accounts[1],66666666)  //大于余额会发生异常,

contract.transfer(web3.eth.accounts[1],60000)

然后查看第这两个钱包的余额变动

contract.blanxeOf(web3.eth.accounts[0])

contract.blanxeOf(web3.eth.accounts[1])

一个简单的加密合约代码

备注:编译时,要将build文件夹删除,其次在部署合约时,一定要添加–reset,否则修改后的合约没法部署成功。

漏洞:验证钱包的地址是否合法

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注