java玩转区块链-基础篇-solidity语法-基础类型

  • java环境配置
  • 代码准备
    • maven
      • 完整solidity
    • 执行步骤
  • 基础类型
    • 布尔类型
      • 类型标识:
      • 字面常量值:
      • 运算符:
      • 短路规则:
        • example
    • 整形
      • 类型标识:
      • 字面常量值:
      • 除法截断
      • 代码
    • 浮点类型
    • 地址类型
      • 类型标识:
      • 字面常量值:

可以不让搞,但是不允许你不会

java环境配置

  1. jdk版本,jdk1.8+;
  2. IDE环境,ideas;
  3. 依赖包,web3
  4. 区块链网路,开发网Ganache

代码准备

以下是本章所有实例的代码

maven

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.web3j</groupId><artifactId>core</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.web3j</groupId><artifactId>contracts</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><!-- https://mvnrepository.com/artifact/org.web3j/web3j-unit --><dependency><groupId>org.web3j</groupId><artifactId>web3j-unit</artifactId><version>4.8.1</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.web3j</groupId><artifactId>web3j-maven-plugin</artifactId><version>4.6.5</version><configuration><soliditySourceFiles/></configuration></plugin></plugins></build><repositories><repository><id>central</id><name>central</name><url>https://maven.aliyun.com/repository/central</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>jcenter</id><name>jcenter</name><url>http://jcenter.bintray.com/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>maven-net-cn</id><name>Maven China Mirror</name><url>https://dl.bintray.com/ethereum/maven</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories>
完整solidity
pragma solidity ^0.5.0;contract TypeDescContract {constructor() public {}function boolTrunc() public view returns (uint){uint a = 12;a < 13 || a++ < 14;return a;}function boolTrunc2() public view returns (uint){uint a = 12;a < 13 && a++ < 14;return a;}function uintDivTrunc() public view returns (uint) {uint a = 5/2.5;return a;}function getSelfAddress() public view returns (address){return msg.sender;}
}

执行步骤

(1) 启动ganache
(2) 在项目目录resources中编写合约脚本

(3) 执行脚本转化java类

双击执行插件命令,生成java类。
(4) 部署合约到ganache本地开发链

package com.lession.type;import org.web3j.crypto.Credentials;
import org.web3j.model.ArrayContract;
import org.web3j.model.TypeDescContract;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.gas.StaticGasProvider;import java.math.BigInteger;public class TypeDescMain {public static void main(String[] args) throws Exception {Web3j web3j = Web3j.build(new HttpService("HTTP://127.0.0.1:7545"));String pk = "d8673b8d4c7a9345c7cd8bb91574389d29b1e69cdbe0be9ac8fdf10f43e69c55";//(1)Credentials credentials = Credentials.create(pk);//(2)System.out.println("Account address: " + credentials.getAddress());System.out.println("Account ak: " + credentials.getEcKeyPair().getPrivateKey().toString(16));System.out.println("Account pk: " + credentials.getEcKeyPair().getPublicKey().toString(16));StaticGasProvider provider = new StaticGasProvider(new BigInteger("20000000000"),new BigInteger("6721975"));TypeDescContract contract = TypeDescContract.deploy(web3j,credentials,provider).send();//(3)System.out.println("contractAddress:" + contract.getContractAddress());//(4)}
}

代码解释:
(1) 从ganache中找一个账户的私钥
(2) 通过私钥生成鉴权信息
(3) 部署合约
(4) 打印生成链上合约地址

(5) rpc调用合约

package com.lession.type;import org.web3j.crypto.Credentials;
import org.web3j.model.TypeDescContract;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.http.HttpService;
import org.web3j.tx.gas.StaticGasProvider;import java.math.BigInteger;public class TypeDescClient {public static void main(String[] args) throws Exception {Web3j web3j = Web3j.build(new HttpService("HTTP://127.0.0.1:7545"));String pk = "d8673b8d4c7a9345c7cd8bb91574389d29b1e69cdbe0be9ac8fdf10f43e69c55";Credentials credentials = Credentials.create(pk);System.out.println("Account address: " + credentials.getAddress());//(1)System.out.println("Account ak: " + credentials.getEcKeyPair().getPrivateKey().toString(16));System.out.println("Account pk: " + credentials.getEcKeyPair().getPublicKey().toString(16));StaticGasProvider provider = new StaticGasProvider(new BigInteger("20000000000"),new BigInteger("6721975"));TypeDescContract contract = TypeDescContract.load("0x64de7ed9f8a2fe5c6303cc980c7d15ccac873f85",web3j,credentials,provider);//(2)System.out.println("boolTrunc:" + contract.boolTrunc().send().toString()); //(3)System.out.println("boolTrunc2:" + contract.boolTrunc2().send().toString());System.out.println("uintDivTrunc:" + contract.uintDivTrunc().send().toString());}
}

代码解释:
(1) 通过私钥生成鉴权
(2) 通过合约地址,加载合约
(3) rpc调用合约函数

基础类型

布尔类型

类型标识:

bool

字面常量值:

true 或 false

运算符:

!(逻辑非) ,&&(逻辑与),||(逻辑或),==(等于),!=(不等于),<=(小于等于),<(小于),>=(大于等于),>(大于)

短路规则:

||和&&遵循短路规则,f(x)||g(y)如果f(x)为true,则g(y)不会执行,f(x)&&g(y),如果f(x)为false,则g(y)不会执行。

example

合约代码

function boolTrunc() public view returns (uint){uint a = 12;a < 13 || a++ < 14;return a;}function boolTrunc2() public view returns (uint){uint a = 12;a < 13 && a++ < 14;return a;}

java代码

System.out.println("boolTrunc:" + contract.boolTrunc().send().toString()); System.out.println("boolTrunc2:" + contract.boolTrunc2().send().toString());

执行结果:

boolTrunc:12
boolTrunc2:13

boolTrunc中的a++并未执行,boolTrunc2中的a++执行了变成了13

整形

类型标识:

uint,uint8~uint256

字面常量值:

12 --> 为uint256

除法截断

5/3=1

代码

solidity

function uintDivTrunc() public view returns (uint) {uint a = 5/2.5;return a;}

java

System.out.println("uintDivTrunc:" + contract.uintDivTrunc().send().toString());

执行结果

uintDivTrunc:2

浮点类型

不支持

地址类型

类型标识:

address

字面常量值:

0x45b6d967bd2962ebb232c2a8065ce9e4abc93aab
地址类型存储一个 20 字节的值

java玩转区块链-基础篇-账户

java玩转区块链-基础篇-solidity语法-基础类型相关推荐

  1. java玩转区块链-基础篇-账户

    java玩转区块链-基础篇--账户 java环境配置 基础概念 账户 maven包引用 创建账户代码 代码解释 (1) (2) (3) (4) 可以不让搞,但是不允许你不会 java环境配置 jdk版 ...

  2. 区块链开发之Solidity编程基础(三)合约数据存储

    Solidity编程基础三 概要 以太坊虚拟机 EVM 数据位置 storage/存储 memory/内存 calldata/调用数据 Stack 栈 数据赋值成本 概要 本章将进行太坊虚拟机EVM的 ...

  3. 怎样成为php高手,怎么成为php高手?如何自学成为php高手?优秀的PHP开发者是怎样炼成的?-PHP教程-基础篇-php语法基础--创业的风,吹向了年轻之长藤个人博客网站...

    怎么成为php高手?如何自学成为php高手?优秀的PHP开发者是怎样炼成的?要炼成php高手绝非一日之功劳,必须是通过系统的,高效的方法才能达到巅峰!何为巅峰呢? 很多年前,也许我们还学着原生的php ...

  4. 基于Java的Android区块链钱包开发(ETH篇)

    基于Java的Android区块链钱包开发-ETH篇 引言 使用的库 具体代码如下 生成公私钥.地址 查余额.签名转账 引言 首先要生成12个助记词,区块链开发之生成12个助记词 使用的库 imple ...

  5. 基于Java语言构建区块链(六)—— 交易(Merkle Tree)

    基于Java语言构建区块链(六)-- 交易(Merkle Tree) 2018年04月16日 10:21:35 wangwei_hz 阅读数:480更多 个人分类: 区块链比特币bitcoin 最终内 ...

  6. 基于Java语言构建区块链(四)—— 交易(UTXO)

    基于Java语言构建区块链(四)-- 交易(UTXO) 2018年03月11日 00:48:01 wangwei_hz 阅读数:909 标签: 区块链比特币 更多 个人分类: 区块链 文章的主要思想和 ...

  7. 基于Java语言构建区块链(五)—— 地址(钱包)

    基于Java语言构建区块链(五)-- 地址(钱包) 2018年03月25日 18:02:06 wangwei_hz 阅读数:1292更多 个人分类: 区块链bitcoin比特币 文章的主要思想和内容均 ...

  8. 小学生玩转区块链开发,会成为代表中国未来的Builder吗?

    2月6日晚上,一个12岁小学生突然在crypto圈火了. 在社群中流传的一幅图片上,一位自称是12岁的小学生正在网上教人们学习如何在以太坊上部署区块链. 根据小男孩在某站的视频(目前被删除),这名小男 ...

  9. 调用wasm_PDX Utopia区块链协议栈使用Solidity调用wasm智能合约

    在这个瞬息万变的世界中,智能合约已成为所有平台中强有力的服务.Solidity是一种趋势,PDX Utopia区块链协议栈使用Solidity调用wasm智能合约. ▼ 什么是Solidity? So ...

最新文章

  1. 脑机接口:从基础科学到神经康复
  2. 三层交换机能传递路由吗?_华为ensp三层交换机VLAN配置静态路由互通
  3. SAP Spartacus 4.0 deprecation 之一 - i18next-xhr-backend
  4. python3 32位_Python 3.6.8软件安装教程
  5. 自动行政审批流程组件的审批流程节点定义【民间称为工作流组件、官方称为审批流程组件】...
  6. mysql随机查询多条记录表_MySQL 随机查询表中N条记录
  7. Count on a tree SPOJ - COT
  8. hdu 6108 小C的倍数问题
  9. Instgram和color,谁会更成功?
  10. 利用QrCode.Net生成二维码 asp.net mvc c#
  11. FIS如何成为制霸北美的金融科技航母?丨亿欧解案例
  12. MMORPG大型游戏设计与开发(概述)updated
  13. 二进制转三进制 C语言版
  14. 【LeetCode】18. 4Sum 四数之和
  15. 有尊严的生命(zz)
  16. 我的世界java手机版怎么调按键_《我的世界》按键设置 pc版快捷按键代码大全...
  17. 在Java中操作MySQL(JDBC)
  18. C# Windows Service入门
  19. android progressbar 代码,android ProgressBar纯java样式修改
  20. Linux:git、github、gitbash简介

热门文章

  1. 全国普通高等学校本科专业目录(2004版)
  2. 2016年北京中国云计算技术大会会后感
  3. 使用七牛云上传文件报错error=incorrect region, please use up-z2.qiniu.com
  4. 致敬高伯龙,小年给自己加油哦!
  5. 计算机研究生 在职2018,2018年计算机在职研究生考试具体内容是什么
  6. 20190326——Python机器学习 引言
  7. 计算机图形学七:纹理映射(Texture Mapping)及Mipmap技术
  8. 新的一年,怎么制定个人目标,做好十年规划?
  9. 干货,教你怎样开一场真正的战略会
  10. QT配置Eigen库