以太坊Ethereum应用HelloWorld开发及测试币申请

阐明一个事:以太坊和比特币都不是区块链,它们是基于区块链的一种应用,区块链可以理解为各种技术的组合或者一直新型的“数据库”。想要了解更多,可以去度娘下载相关的白皮书蓝皮书看看,这里有些pdf的白皮书可以下载观摩。

 

说明:以下样例和代码操作都是基于Java版的钱包应用来描述的。

标签:以太坊钱包开发,区块链钱包开发,ethereum钱包开发,web3j接口使用,以太坊测试网络,获取以太坊测试

 

测试网络

什么是测试网络?以太坊为了方便智能合约的开发、学习和测试,开启了一条全新的区块链,与主网络特性相同,但测试网络中的以太币价值更低,也更容易得到。这样不至于在主网络上开发出现 BUG 造成以太币的损失。当然我们也可以搭建私有的测试网络,不过区块链的去中心化特点,需要更多的节点运行才能达到理想效果,好在以太坊有公开的测试网络,而我们接入也更容易。

目前提供的测试网络:Ropsten、Rinkeby、KovanMorden(已下架),其中使用较多是的是RinkebyKovan

 

涉及框架或模块(Java)

web3j  gtihub:  https://github.com/web3j/web3j

web3j是使用java语言开发用于和以太坊网络进行交互的类库。它是直接使用http请求以太坊的API,学习及使用的成本比较低。

另外还有js的版本:https://github.com/ethereum/web3.js,可自行参考。

 

使用样例(部分代码)

maven依赖

<dependency>
    <groupId>org.web3jgroupId>
    <artifactId>abiartifactId>
    <version>3.3.1version>
dependency>
<dependency>
    <groupId>org.web3jgroupId>
    <artifactId>coreartifactId>
    <version>3.3.1version>
dependency>

 

配置文件

# web3j - ethereum - settings
# Main Ethereum Network:
# https://mainnet.infura.io/
# Test Ethereum Network (Rinkeby):
# https://rinkeby.infura.io/
# Test Ethereum Network (Kovan):
# https://kovan.infura.io/
eth.web3j.profile=kovan
eth.web3j.profile.api.token=GZUqwBFcfDaniSWXwbJD
eth.web3j.http.service=https://${eth.web3j.profile}.infura.io/${eth.web3j.profile.api.token}

 

此处根据自己的环境灵活配置环境,可以使用各个环境web3j的实例。

 

@Bean
Web3j web3j() {
    Web3j web3j = Web3j.build(new HttpService(“${ eth.web3j.http.service}”));
    
return web3j;
}

 

//# 创建轻量级钱包(获取地址)

String walletFile = WalletUtils.generateLightNewWalletFile("123456", new File("."));

返回的是json格式文件,里面包含了地址,同时这个文件就是keystore。

 

//# 查询账户余额,address是0x开头地址

EthGetBalance ethGetBalance =

web3j.ethGetBalance(address, DefaultBlockParameterName.LATEST).send();

 

//# 转账,返回交易hash

String toAddress = "0xadress"转出地址
Double amount =
1D; //# 转账数目,单位在下面指定Convert.Unit.ETHER
String privateKey =
"";//# 私钥(只有自己知道)
Credentials keys = Credentials.
create(privateKey);
TransactionReceipt transactionReceipt = Transfer.
sendFunds(web3j, keys, toAddress, BigDecimal.valueOf(amount), Convert.Unit.ETHER).send();

 

网站查看余额及交易记录

Kovan环境:

https://kovan.etherscan.io/address/0x3d95eaEB3c1A2017FE9c90E760906D4624d71318

Rinkeby环境:

https://rinkeby.etherscan.io/address/0xcab0FC2c49D2C12e49571019977B518Fcbf4109a

 

密钥普及

公钥和私钥成对出现 

公开的密钥叫公钥,只有自己知道的叫私钥 

用公钥加密的数据只有对应的私钥可以解密 

用私钥加密的数据只有对应的公钥可以解密 

如果可以用公钥解密,则必然是对应的私钥加的密 

如果可以用私钥解密,则必然是对应的公钥加的密 

 

Keystore+密码=银行卡号+银行卡密码

Keystore ≠ 私钥

Keystore+密码=私钥

Keystore不是私钥,常见于以太坊钱包,一般你创建以太坊钱包后,会让你备份Keystore,输入密码,会出现一串字符这就是 Keystore。Keystore的本质是加密后的私钥,Keystore必须配合你的钱包密码来使用。用途:在导入钱包的时候,选择官方钱包,输入 Keystore 和密码,就能进入钱包了。需要说明的是,这和用私钥或助记词导入钱包不一样,用私钥或助记词导入钱包,不需要知道密码。

 

私钥:私钥可以计算出公钥,公钥可以经过一系列数字签名生成钱包地址。所以, 私钥的持有者才是数字货币的持有者。你可以把它看成是你的银行卡密码。

公钥:它是密码学上的概念,由私钥推算出来。公开密钥的算法属于不对称加密算法,该算法拥有两个密钥:公钥和私钥。使用私钥加密的数据可以用公钥解密,反之亦可。通过公钥可以算出钱包地址。

钱包地址:地址由公钥转换而来,地址被用于接收数字货币,一个地址上收到数字货币后,只有使用该地址所对应的私钥才能花费这个地址上的钱。可以把钱包地址想象成一个银行卡号,别人可以给你的钱包地址打钱。一般地址和私钥是成对出现的,他们的关系就像银行卡号和密码。地址就像银行卡号一样用来记录你在该钱包地址上存有多少币。我们可以简单的把钱包地址理解成为银行卡号,该钱包地址的私钥理解成为所对应银行卡号的密码。只有你在知道银行密码的情况下才能使用银行卡号上的钱。所以,在使用钱包时请保存好你的地址和私钥。

 

获取测试币

除了开发过程使用,其他时候没有任何实际价值,表当真^_^, 谁认真谁输.....

6.1 Kovan环境的测试币申请

https://gitter.im/kovan-testnet/faucet,使用gethub账户,gitlab账户,twitter账户登录可以申请3个ether。

 

6.2 Rinkeby环境的测试币申请

https://faucet.rinkeby.io/ , 它Rinkeb水龙头,但是,这里需要科学上墙~~~。最好用的twitter账户直接登录之后,推送一条带有你地址的消息,复制连接到水龙头网站即可获取测试币,很土豪,一个星期可以获取十多个ether。具体图文操作提示可以度娘,这里不再截图排版。

 

 

写的不好,不喜勿喷!  谢谢~~

 

如果觉得申请比特币测试币麻烦,可以加我联系方式,获取有偿测试币~~~

企鹅号: 631722350

邮箱: [email protected]