代币就是数字货币,比特币、以太币就是一个代币。利用Cypherium的java智能合约可以轻松编写出属于自己的代币。这些代币是建立在区块链之上,代表你拥有并可转让给其他人的数字资产。现在我们就来看看怎样创建一个这样的代币。
准备工作:
- 下载示例代码。https://github.com/cypherium/ContractExample
目录结构介绍:
├── client //客户端
│ ├── cypher //可执行文件cypher
│ ├── jdk //Java Development Kit
│ ├── genesis.json //初始化创世区块所需文件
│ ├── db //自定义数据库目录
│ └── executable_file //可执行文件
│ ├── Linux
│ │ └── cypher
│ ├── Mac
│ │ └── cypher
│ └── Windows
│ └── cypher
├── file2str //class文件生成二进制字符串工具
│ ├── file2str.go //go源码
│ ├── Linux
│ │ └── file2str
│ ├── Mac
│ │ └── file2str
│ └── Windows
│ └── file2str.exe
└── src
├── HelloWorld.java //Java智能合约
├── index.html //合约部署页面
└── web3.js
接下来的操作步骤,默认在ContractExample/client
目录执行。
请根据操作系统,把合适的可执行文件cypher,复制到client下,如:
cp executable_file/Mac/cypher ./
- 初始化节点的创世区块。datadir为自行指定的数据库目录,如db。
./cypher --datadir db init genesis.json
- 启动节点。
./build/bin/cypher --datadir db --networkid 123666 --port 7000 --rpcport 8000 --rpc --rpccorsdomain "*" --rpcaddr 0.0.0.0
- 启动节点的js交互窗口(用上一步成的ipc文件):
./cypher attach db/cypher.ipc
- 创建账户。
personal.newAccount("your password")
- 请联系我们,给您的测试账户中,转入一些可供测试的代币。邮箱地址:xxx
- 查看您的账户余额。
cph.getBalance("your account address")
- 您可以通过以下方法,把您账户中的资金转给其他账户。
cph.sendTransaction(from,to,value,gas,gasPrice,data,nonce,Function)
- from: String - 指定的发送者的地址。
- to: String - (可选)交易消息的目标地址,如果是合约创建,则不填。
- value: Number|String|BigNumber - (可选)交易携带的货币量,以wei为单位。如果合约创建交易,则为初始的基金。
- gas: Number|String|BigNumber - (可选)默认是自动,交易可使用的gas,未使用的gas会退回。
- gasPrice: Number|String|BigNumber - (可选)默认是自动确定,交易的gas价格,默认是网络gas价格的平均值 。
- data: String - (可选)或者包含相关数据的字节字符串,如果是合约创建,则是初始化要用到的代码。
- nonce: Number - (可选)整数,使用此值,可以允许你覆盖你自己的相同nonce的,正在pending中的交易。
- Function - 回调函数,用于支持异步的方式执行。
- 通过以下命令查看现在共识到第几个区块了。
cph.txBlockNumber
API
ERC20是以太坊定义的一个代币标准。要求我们在实现代币的时候必须要遵守的协议,如指定代币名称、总量、实现代币交易函数等,只有支持了协议才能被以太坊钱包支持。
Cypherium的代币标准接口如下:
package javax.cypher;
public final class Cypnet {
/**
* 设置代币信息。
* @param symbol 代币符号
* @param name 代币名称
* @param totalSupply 发行代币总量
* @param _owner 合约拥有者账户地址,传""空时,代表默认为创建者账户地址
* @return
*/
public static native boolean setTokenInfo(String symbol, String name, long totalSupply, String _owner