前言
首先,还是一贯的思路,带着问题学习。
在最后,附带上我的Gitee代码,因为国内访问github有时候真的很蛋疼。
提问
1.Solidity是什么?
2.java如何调用Solidity?
解答:
1.Solidity是什么呢?
Solidity是一种语言,为了编写智能合约的一种语言。以*.sol结尾的(类似test.java结尾的java文件)。该语言类似javaScript语法。易上手。
展示个小案例。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Storage
* @dev Store & retrieve value in a variable
* @custom:dev-run-script ./scripts/deploy_with_ethers.ts
*/
contract Storage {
uint256 number;
/**
* @dev Store value in variable
* @param num value to store
*/
function store(uint256 num) public {
number = num;
}
/**
* @dev Return value
* @return value of 'number'
*/
function retrieve() public view returns (uint256){
return number;
}
}
其中于java比较不同的是,里面的数据类型及方法访问定义。
Solidity目前的ide有:remix (一款线上的编辑工具),
及基于node环境的vscode(基于vscode编译需要安装Solidity的环境)。
编译器的差别、
remix:
优点:免安装,可直接使用,易上手,集成基础功能。
缺点:没有本地保存,刷新后,会直接清空当前编写的合同,易丢失文件
vscode:
优点:不易丢失文件
缺点:需要安装插件,需要本地部署,安装框架
2.合约部署,这个是属于区块链的东西,针对后端的java攻城狮们,并不是太了解。
那么接下来说的就是,在java中,如何调用智能合约。
首先,java调用智能合约,原理就是,智能合约部署到区块链后,java调用区块链api。
简单理解为,我们就是调用第三方的api。但是呢,区块链针对这块做了很多加密算法的工作。并不像原始的http那样显示的方式直接调用。这里就需要使用到一些java已经封装好的包了。
引入对应的maven包(具体的版本,到时候看对应的发布)
<!--web3j-->
<dependency>
<groupId>org.web3j</groupId>
<artifactId>core</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.web3j</groupId>
<artifactId>codegen</artifactId>