蚂蚁区块链官方Demo解析(java版)及相关接口调用

前言
该文档内容为蚂蚁区块链上的相关技术以及未解决的问题,以BaaS提供的Demo为基础,进行相关API的调用与测试。
蚂蚁区块链文档:https://tech.antfin.com/docs/2/73763
BaaS平台:https://baas.cloud.alipay.com/(个人支付宝扫码即可)
该文档不在过多赘述蚂蚁区块链产品相关基本知识,个人可以通过上述蚂蚁区块链文档了解。
开发前请务必优先阅读文档=> 蚂蚁区块链BaaS平台 =>产品概述 =>基础术语。以便了解陌生名词解释。

蚂蚁区块链开发指南

  1. SDK开发指南
    该文档提供JAVA SDK,JS SDK, C++ SDK 三种类型,其中JAVA SDK又分为V0.10.2.12与V0.10.2.4两个版本,该文档是基于JAVA SDK V0.10.2.12的版本进行测试与开发。
  2. JAVA SDK
    蚂蚁区块链合约平台 Java SDK 是通过服务(Service)的形式对外提供功能,具体包括账户服务(Account Service)、合约服务(Contract Service)、事件服务(Event Service)、查询服务(Query Service)和本地服务(Local Service)。SDK 提供以同步或异步方式发送交易、查询交易、订阅事件等的接口。无论以同步或异步的方式发送交易,SDK 封装了发送交易后查询收据的逻辑,以便您查看交易的执行结果。
    Java SDK 的 Jar 包依赖 Netty,不同的运行系统需要选择不同的 Netty 依赖包配置到 Maven 文件中。
    请自行下载
    JAVA SDK : mychainx-sdk-0.10.2.12.jar
    Netty 依赖包 : netty-tcnative-openssl-static-2.0.17-Final-mychain-all.jar
    2.1运行环境说明
    JDK 7 及以上版本在终端运行 java -version 查看当前 Java 版本。
    Maven 3.5.4 及以上版本在终端运行 mvn -v 查看当前 Maven 版本。
    在 Linux 下使用 SDK,要求 GLIBC 版本高于 2.14。
    该文档一切操作都基于win 7系统,不同的系统可以从文档选择不同版本的jar包下载

2.2在 Maven 文件中引入 SDK 包
安装下载的 Jar 包到项目目录。
从命令终端进入到项目目录,执行以下命令:
//安装 SDK 到本地仓库
mvn install:install-file -Dfile=mychainx-sdk-0.10.2.12.jar -DgroupId=com.alipay.mychainx -DartifactId=mychainx-sdk -Dversion=0.10.2.12 -Dpackaging=jar -DpomFile=pom.xml

//如需使用 K1,则需安装 Netty 依赖到本地仓库,注意请选择对应平台 netty-tcnative-openssl-static 版本,并修改相应的 classifier,macOS:osx-x86_64,Linux:linux-x86_64,Windows:windows-x86_64
mvn install:install-file -Dfile=netty-tcnative-openssl-static-2.0.17-Final-mychain-all.jar -DgroupId=io.netty -DartifactId=netty-tcnative-openssl-static -Dversion=2.0.17-Final-mychain-all -Dpackaging=jar
之后操作按照文档:https://tech.antfin.com/docs/2/144520 操作即可。
在准备文件中需要四个文件:
CA 机构的根证书(trustCa)
客户端的证书文件(client.crt)
客户端的私钥文件(client.key)
账户的私钥文件(user.key)
文件获取路径如下:
浏览器进入BaaS平台=>支付宝扫码进入。依据下图流程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(请务必记录下SSL秘钥密码)
下载私钥与证书保存好。点击创建账户

记录账户信息
1:账户名 2:账户私钥保护密码 3:账户的恢复私钥保护密码
并下载 pub.txt user.key recover-pub.txt recover-user.key四个文件保存好。

到这里已经凑齐了 client.crt client.key user.key 三个文件,还有一个trust.Ca文件
重新进入BaaS平台会显示该界面,点击免费体验。
在这里插入图片描述
在这里插入图片描述

点击下载即可得到trustCa文件。

什么是TLS证书?
客户端和节点通过BaaS平台上的CA 中心获取 TLS 证书,客户端与节点、节点与节点间实行 TLS 双向认证,且通信流量经 TLS 加密,抵御中间人攻击。除了基本的证书验证外,节点与节点之间还增加了握手逻辑,通过在握手过程中添加验证对方节点私钥签名的方式来确保节点间通信的可靠。

这里不明白TLS与SSL的关系。文档中也没有详细介绍。

阿里云SSL证书(SSL Certificates)由阿里云联合中国及中国以外地域多家数字证书管理和颁发的权威机构,在阿里云平台上直接提供的服务器数字证书,并且给您提供额外的一键式HTTPS、证书扩展服务和证书托管等增值服务,帮助您以最小的成本将您的服务从HTTP转换成HTTPS,实现网站或移动应用的身份验证和数据加密传输。

通过文档中对SSL证书的介绍,我初步理解为SSL为TLS证书的一种。

完成SDK快速开始操作后,需要在idea中加载一下我们引入的jar包,运行DemoSample,你会发现报错。这里是开发文档中的漏洞。程序文件中缺少依赖。

在这里插入图片描述

在pom.xml中添加图中红色方框中的代码:

org.bouncycastle
bcpkix-jdk15on
1.60


之后下载jar包 bcpkix-jdk15on-1.60.jar 并在命令行转到项目文档路径中运行:
mvn install:install-file -Dfile=bcpkix-jdk15on-1.60.jar -DgroupId=org.bouncycastle -DartifactId=bcpkix-jdk15on -Dversion=1.60-Final-mychain -Dpackaging=jar -Dclassifier=windows-x86_64
(jar包可以看看能否在网上下载相应的版本,不行的话 留言 我给你发个云盘地址)
不同的操作系统需要修改最后的Dclassifier :macOS:osx-x86_64,Linux:linux-x86_64,Windows:windows-x86_64。之后在重新加载下jar包就可以正常运行。
3.Solidity智能合约
3.1智能合约是什么?
如果说区块链作为像公路一样的底层基础设施,那么搭载在区块链上的智能合约,就像是汽车,在将来的实际应用中,起到链接产业和基础设施的作用。就像当前社会的互联网和其上方的应用一样。
智能合约作用有两个: 1 进行链上存证 2推动相关业务流转。物权平台中的结果上链其实是链上存证。而各个审批流其实是智能合约的驱动业务流转。

关于智能合约的学习资料:https://www.bilibili.com/video/BV1Gs411g7Zc

该资料给你讲解了基本的solidity语法。并实现了一个简单的实例。看完该视频基本就可以看懂文档中的solidity案例。视频不需要看的很仔细,主要是理解语法结构,以及一些相关的函数。
另外蚂蚁区块链上的solidity与原生的solidity有些差别。

蚂蚁链平台 Solidity 合约语言 vs. 以太坊官方 Solidity 合约语言

(1)蚂蚁链平台中,solidity合约使用identity替代官方solidity的address关键字。identity表示的合约地址或账户地址,均为为32字节,而官方solidity中address表示的地址是20字节。
(2)蚂蚁链合约不支持 suicide,也不支持 selfdestruct。
蚂蚁链合约不支持在合约内创建合约,因此不要在合约内使用 new 来创建合约。
(3)在蚂蚁链平台上,如果尝试在合约内向一个不存在的地址转账,合约会异常终止,并返回错误码 10303;而在以太坊官方 Solidity 合约内向不存在的地址转账时,系统会自动以该地址创建账户。
(4)对于.balance (uint256)语句,如果 identity 代表的账户不存在,则在蚂蚁链平台中该语句会造成合约异常终止,并返回错误码 10300;而在以太坊官方 Solidity 合约中,该语句会返回 0,不会造成合约异常终止。
在蚂蚁链平台中,合约内的 block.number、block.timestamp 分别指最新已形成的区块(即本交易所在区块的上一个区块)的高度和时间戳(毫秒);而在官方 Solidity 合约中,这两个参数分别指的是本交易所在区块的高度和时间戳。
(5)蚂蚁链平台不提供 ripemd160 这个散列算法。
(6)蚂蚁链平台中,solidity合约内不支持 CHAINID 指令
(7)蚂蚁链平台中,如果solidity合约执行过程中异常终止,终止之前产生的Event Log依然会出现在交易回执中。

3.2 智能合约的开发工具
如果你看了上面那个视频,里面介绍的Remix是基于以太坊的合约开发工具。蚂蚁区块链上自己提供Cloud IDE平台开发智能合约。
Cloud IDE详解参考文档:https://tech.antfin.com/docs/2/101785
Cloud IDE具体用法参考文档:https://tech.antfin.com/docs/2/101800
4.
JAVA SDK ==> API接口
4.1API接口实现案例及代码详解
Demo参数详解:

1 :contractCode 智能合约代码
2:testContractId 智能合约名称
3:account 创建的账户名称(string类型)
4:userIdentity 创建的账户名称(byte类型)
5:userKeypair 账户的私钥,需要导入user.key文件读取获得
6:testAccount1 创建的另一个账户,用来给其tranfer()
7:keyPassword SSL密钥密码
8:userPassword 账户私钥保护密码。
9:host 节点
10:post 端口号 与节点一起在合约浏览器中查询
11:trustStorePassword trustCA的密码 默认为mychain

4.1.1环境接口
4.1.1.1 环境接口—准备文件及参数
Client.key :证书私钥,配合SSL密码进行操作。
Client.crt :证书文件。
Trust.ca :根证书,需要自行下载。

账户名称 Account,在Demo为String类型,需转化为byte[]类型被引用,转化后为Identity类型
Account => userIdentity <=> (Identity) = ByteUtils.hexStringToBytes(byte[])
账户私钥保护密码:userPassword
账户的恢复私钥保护密码:Demo中未用到。
4.1.1.2 环境初始化流程

初始化链的环境:initMychainEnv()
引入主账号userIdentity(需要通过account进行byte类型转换得到),通过userPassword 对user.key文件进行解密获取到userKeypair文件。然后创建env。
然后进行通过证书文件等与SSL平台建立连接并连接链上节点,然后通过userKeypair设置签名signer操作.

buildMychainEnv():创建链上环境
(1)inetSocketAddress: 表示链上节点,需要参数post host
(2)Ssloption:通过Client.key Client.crt Trust.ca 三个文件以及trustStorePassword,keyPassword与SSL平台进行连接。
(3)socketAddressArrayLis: 添加链上节点 参数为:inetSocketAddress
(4)signerOption 通过userKeypair设置签名signer操作
(5)通过Ssloption socketAddressArrayList signerOption 三个参数进行创建env。==>ClientEnv.build(socketAddressArrayList, sslOption, signerOption)

Demo中出现的TeeChain为隐私合约链&

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
兰顿蚂蚁是一种计算机模拟生物,其行为类似于真实的蚂蚁。在兰顿蚂蚁的模拟中,一只虚拟的蚂蚁在一个无限大的网格中行走,它会遇到黑色或白色的格子。如果它遇到的是白色的格子,它会向右转,并将当前的格子涂成黑色;如果它遇到的是黑色的格子,它会向左转,并将当前的格子涂成白色。下面是使用Java模拟兰顿蚂蚁的代码: ```java public class LangtonAnt { private int[][] grid; private int antX, antY, antDir; private final int ANT_UP = 0, ANT_RIGHT = 1, ANT_DOWN = 2, ANT_LEFT = 3; public LangtonAnt(int width, int height) { grid = new int[width][height]; antX = width / 2; antY = height / 2; antDir = ANT_UP; } public void step() { if (grid[antX][antY] == 0) { antDir = (antDir + 1) % 4; grid[antX][antY] = 1; } else { antDir = (antDir + 3) % 4; grid[antX][antY] = 0; } switch (antDir) { case ANT_UP: antY--; break; case ANT_RIGHT: antX++; break; case ANT_DOWN: antY++; break; case ANT_LEFT: antX--; break; } if (antX < 0) { antX = grid.length - 1; } else if (antX >= grid.length) { antX = 0; } if (antY < 0) { antY = grid[0].length - 1; } else if (antY >= grid[0].length) { antY = 0; } } public void printGrid() { for (int y = 0; y < grid[0].length; y++) { for (int x = 0; x < grid.length; x++) { if (x == antX && y == antY) { System.out.print("*"); } else if (grid[x][y] == 0) { System.out.print(" "); } else { System.out.print("#"); } } System.out.println(); } } public static void main(String[] args) { LangtonAnt ant = new LangtonAnt(50, 50); for (int i = 0; i < 10000; i++) { ant.step(); } ant.printGrid(); } } ``` 在上面的代码中,我们定义了一个`LangtonAnt`类来表示兰顿蚂蚁。在类的构造函数中,我们初始化了一个二维数组来表示网格,并将蚂蚁的初始位置设置在网格的中心。蚂蚁的初始方向为向上。 `step`方法是模拟蚂蚁的行走过程。首先,我们检查当前蚂蚁所在的格子的颜色。如果是白色的,我们将蚂蚁的方向向右转,并将当前的格子涂成黑色。否则,我们将蚂蚁的方向向左转,并将当前的格子涂成白色。然后,我们根据蚂蚁的方向更新蚂蚁的位置。如果蚂蚁走出了网格的边界,我们将它的位置重新设置到网格的另一侧。 `printGrid`方法用来输出当前的网格状态。我们使用`*`来表示蚂蚁的位置,使用空格表示白色的格子,使用`#`表示黑色的格子。 在`main`方法中,我们创建了一个`LangtonAnt`对象,并模拟了10000步蚂蚁的行走过程。最后,我们调用`printGrid`方法输出了模拟结束后的网格状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值