Android 智能合约Web3j的钱包创建与交易浅谈

对于智能合约来说,大家应该都有所了解吧,至少也听说过吧?

当然,智能合约、以太坊、以太币这些关键词也会在国内普遍的流行起来,这是国际的趋势所在。

什么是以太坊?

以太坊是一个平台,有开源代码,相当于操作系统,如android,代码开源,你可以在这个平台上开发智能合约。由于得到很多人共识并且认可这个模式,很多人就购买服务器(矿机)运行这个以太坊代码,矿机运行代码就是挖矿(处理交易和验证交易),每一个矿机都是一个节点,节点之间有通信验证,并且任意一个节点失败或诈骗都会认为交易无效,做到去中心化,所有公共节点组成的叫做公链。

什么是以太币?

在以太坊中所有运行代码(如交易或验证或存储等)都需要消耗能量,相当于现实世界中的货币,在以太坊中就是以太币。有人又问,在以太坊中不是可以发行自己的token(dai币)嘛,是不是自己发行一个代币,就可以无限使用公链的算力资源呢。答案就是:no。在以太坊这个系统中,所有需要消耗算力的交易都需要支付以太币。
正是因为很多人相信以太币对社会有很大的价值,所以以太币有人们心目中的价格,这就出现了交易所。

什么是智能合约?

智能合约是运行在以太坊上面的app,有技术经验的可以理解为触发器。例如:当我通过以太坊平台租了一间房子,在支付以太币后,智能合约自动将房子的智能锁改为你的私钥,你只要输入一串属于你自己的密码就可以开门,当房子到达期限后,智能合约自动将智能锁的密钥改为预设人的密钥。
所有新发布的智能合约都需要消耗以太币(因为需要公链的矿机计算)。
目前智能合约代码的开发大多是solidity,类似js 和 c语言的结合体。

其实,网上的介绍都是很普遍的,下面我就来说一说web3j的一种用法,使其创建合约进而转币交易:

相关的资料链接:智能合约    Web3j命令工具

前提:SSHSecureShellClient安装:(CentOs-6.5 Linux安装,这里注意jdk也是Linux版本的,而不是Windows版本,否则会报错),安装配置好SSHSecureShellClient和CentOs后就可以来进行web3j的调用了,这里还需要下载web3j的相关压缩包点击打开链接(第四个就可以)。

随每个版本一起提供web3j fat jar,提供命令行工具。命令行允许您使用终端中web3j的一些功能:

这些工具提供:

  • 创建钱包
  • 电子钱包密码管理
  • 以太币从一个钱包转移到另一个钱包
  • 生成Solidity智能合约包装

命令行工具可以从项目存储库发布页面,下载部分获取zipfile / tarball ,或者通过HomeBrew获取OS X用户 ,或者通过AUR获取Arch linux用户 

brew tap web3j/web3j
brew install web3j

当我们把web3j的压缩包下载后,就可以用SSH执行命令,直接进入web3j的目录里(在SSH中直接导入jdk1.8和web3j解压后的文件夹,1.8以下的jdk可能会报错,所以需要安装1.8的jdk,并将原来的jdk1.6或者1.7卸载掉即可)。

上面的两行命令在SSH中执行如下:

./brew tap web3j/web3j
./brew install web3j

要通过zipfile运行,只需解压缩zip文件并运行二进制文件:

$ unzip web3j-<version>.zip
   creating: web3j-3.0.0/lib/
  inflating: web3j-3.0.0/lib/core-1.0.2-all.jar
   creating: web3j-3.0.0/bin/
  inflating: web3j-3.0.0/bin/web3j
  inflating: web3j-3.0.0/bin/web3j.bat
$ ./web3j-<version>/bin/web3j

              _      _____ _     _
             | |    |____ (_)   (_)
__      _____| |__      / /_     _   ___
\ \ /\ / / _ \ '_ \     \ \ |   | | / _ \
 \ V  V /  __/ |_) |.___/ / | _ | || (_) |
  \_/\_/ \___|_.__/ \____/| |(_)|_| \___/
                         _/ |
                        |__/

Usage: web3j version|wallet|solidity ...

我们可以直接找到web3j的文件夹的bin,执行如下命令即可显示上面的内容:

./web3j

接下来就是钱包的创建和交易了:

钱包工具

要生成新的以太坊钱包:

$ web3j wallet create

要更新现有钱包的密码:

$ web3j wallet update <walletfile>

要将以太网发送到另一个地址:

$ web3j wallet send <walletfile> 0x<address>|<ensName>

上面的命令在SSH中请忽略$直接用./代替执行,如下:

./web3j wallet send <walletfile> 0x<address>|<ensName>

下面提供一下需要的相关参数:

创建钱包后会提示你输入密码、URL(http://192.168.0....类型)

我的钱包地址:0xb25c9F9BEEe12D10BCB58Dcf5ab2d09f1e6c47d3

对方的钱包地址:3ee2d520fc7a1e532309f00455b27118f9864155(这里是你自己创建的钱包地址)

在向对方进行交易的时候,我们要去修改一下生成的.json文件名,因为生成的文件名过长,不利于命令的输入:

./web3j wallet send ks/sgf.json 0xb25c9F9BEEe12D10BCB58Dcf5ab2d09f1e6c47d3

上面的ks是我自己创建的文件夹来存放我的sgf.json文件的,0xb25c9F9BEEe12D10BCB58Dcf5ab2d09f1e6c47d3则是我要打币的对象。

修改文件名命令(把这个很长的):

mv UTC--2018-07-03T09-01-16.927000000Z--3ee2d520fc7a1e532309f00455b27118f9864155.json sgf.json

将Ether发送到另一个地址时,在交易发生之前会向您询问一系列问题。请参阅下面的完整示例

以下示例演示如何使用web3j将Ether发送到另一个钱包。

根据下面的数据我们可以看到:

输入的数量可以是0.000001的小数,货币单位则是ether、wei等,它们都有自己的换算值。

$ ./web3j-<version>/bin/web3j wallet send <walletfile> 0x<address>|<ensName>

              _      _____ _     _
             | |    |____ (_)   (_)
__      _____| |__      / /_     _   ___
\ \ /\ / / _ \ '_ \     \ \ |   | | / _ \
 \ V  V /  __/ |_) |.___/ / | _ | || (_) |
  \_/\_/ \___|_.__/ \____/| |(_)|_| \___/
                         _/ |
                        |__/

Please enter your existing wallet file password:
Wallet for address 0x19e03255f667bdfd50a32722df860b1eeaf4d635 loaded
Please confirm address of running Ethereum client you wish to send the transfer request to [http://localhost:8545/]:
Connected successfully to client: Geth/v1.4.18-stable-c72f5459/darwin/go1.7.3
What amound would you like to transfer (please enter a numeric value): 0.000001
Please specify the unit (ether, wei, ...) [ether]:
Please confim that you wish to transfer 0.000001 ether (1000000000000 wei) to address 0x9c98e381edc5fe1ac514935f3cc3edaa764cf004
Please type 'yes' to proceed: yes
Commencing transfer (this may take a few minutes)...................................................................................................................$

Funds have been successfully transferred from 0x19e03255f667bdfd50a32722df860b1eeaf4d635 to 0x9c98e381edc5fe1ac514935f3cc3edaa764cf004
Transaction hash: 0xb00afc5c2bb92a76d03e17bd3a0175b80609e877cb124c02d19000d529390530
Mined block number: 1849039

Solidity智能合约包装生成器

请参阅Solidity smart contract wrappers  点击打开链接

好了,就先写到这里了,希望对大家有所帮助。


阅读更多

更多精彩内容