栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

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

maven

        8
        8
    

    

        
            org.web3j
            core
            5.0.0
        
        
            org.web3j
            contracts
            5.0.0
        
        
            org.apache.commons
            commons-lang3
            3.12.0
        
        
        
            org.web3j
            web3j-unit
            4.8.1
        
        
            com.google.guava
            guava
            23.0
        
    
    
        
            
                org.web3j
                web3j-maven-plugin
                4.6.5
                
                    
                
            
        
    
    
        
            central
            central
            https://maven.aliyun.com/repository/central
            
                true
            
            
                false
            
        
        
            jcenter
            jcenter
            http://jcenter.bintray.com/
            
                true
            
            
                false
            
        
        
            maven-net-cn
            Maven China Mirror
            https://dl.bintray.com/ethereum/maven
            
                true
            
            
                false
            
        
    
完整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玩转区块链-基础篇-账户

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号