Java 对接Filecoin 节点钱包,离线创建地址等

Java 对接Filecoin 节点钱包

有遇到疑惑的可加QQ群交流:1057160243

先浏览下官方相关API

Lotus JSON-RPC API 链接:https://docs.filecoin.io/reference/lotus-api/#endpoints

完整RPC源码文档 链接:https://pkg.go.dev/github.com/filecoin-project/lotus/api?tab=doc#FullNode

具体Linux搭建请看上一篇文章。

部分RPC代码


private static final String NODE_URL = "http://ip:port/rpc/v0";

// token由服务器生成
private static final String TOKEN_KEY = "";

private static final BigDecimal DIVAMOUNT = new BigDecimal("1000000000000000000");

private static final BigDecimal FEEDIVAMOUNT = new BigDecimal("10000000000000000");



/**
 * 在线生成地址
 */
public static String getAddress() {
    JSONObject jsonObject = new JSONObject();
    int[] arrayay = {1};
    jsonObject.put("jsonrpc", "2.0");
    jsonObject.put("method", "Filecoin.WalletNew");
    jsonObject.put("params", array);
    jsonObject.put("id", 1);
    String json = jsonObject.toJSONString();
    String body = HttpRequest.get(URL).headerMap(getHeaderMap(), true).body(json).execute().body();
    JSONObject jsonBody = JSONObject.parseObject(body);
    String address = jsonBody.getString("result");
    return address;
}



/**
 * 以json方式请求 带入Authorization token
 */
public static Map getHeaderMap() {
    Map<String, String> headerMap = new HashMap<>();
    headerMap.put("Content-Type", "application/json");
    headerMap.put("charset", "UTF-8");
    headerMap.put("Authorization", "Bearer " + TOKEN);
    return headerMap;
}
//其他API 核心API
// 获取最新高度 Filecoin.ChainHead
// 根据高度获取区块hash Filecoin.ChainGetTipSetByHeight
// 根据区块hash获取区块信息 Filecoin.ChainGetBlockMessages
// 状态查询 Filecoin.StateSearchMsg
// 其他API 请查看官方详细文档


在Filecoin地址规则中,t代表测试网,f代表即将上线的正式网,1代表钱包地址,2是合约地址,3则是矿工地址
地址有4种,分别是: ID,SECP256K1,Actor,BLS

算法简介

blake2

BLAKE2的定位是目前安全系数最高的哈希函数。BLAKE2是基于BLAKE实现的,BLAKE是2008年被提交至SHA-3竞赛的一种哈希函数。

BLAKE2不仅仅只是一个简单的哈希函数而已!首先,BLAKE2有两大主要版本:BLAKE2b和BLAKE2s。BLAKE2b是BLAKE的64位版本,它可以生成最高512位的任意长度哈希。BLAKE2s是BLAKE的32位版本,它可以生成最高256位的任意长度哈希。

BLAKE2x是对BLAKE2的简单扩展,它可以生成任意长度的哈希值(长度不受限制)。

ECC

椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密。

Base32编码

Base32编码是使用32个可打印字符(字母A-Z和数字2-7)对任意字节数据进行编码的方案,编码后的字符串不用区分大小写并排除了容易混淆的字符,可以方便地由人类使用并由计算机处理。Base32将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。

RFC

Request For Comments(RFC),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。目前RFC文件是由Internet Society(ISOC)赞助发行。基本的互联网通信协议都有在RFC文件内详细说明。RFC文件还额外加入许多在标准内的论题,例如对于互联网新开发的协议及发展中所有的记录。因此几乎所有的互联网标准都有收录在RFC文件之中。

通过节点创建地址

创建一个secp256k1钱包
lotus wallet new


创建一个BLS钱包
lotus wallet new bls
f3r4udenceimbb5onjvi23gndpjnqrpcfybnqaumuibz5yynf22ikjdinfujp5zlduggujymw6b2bo4fqfcpva

生成账户ID
lotus-miner init --owner=bls地址 --worker=bls地址 #owner跟worker可以是不同的BLS钱包

Actor f011489

离线创建地址

由于目前fil的助记词各个钱包的派生路径不同,由此主要使用私钥

使用DeterministicKey以路径BIP44

DeterministicHierarchy deterministicHierarchy = new DeterministicHierarchy(masterPrivateKey);
        DeterministicKey deterministicKey = deterministicHierarchy
                .deriveChild(BIP44_PATH, false, true, new ChildNumber(0));
        byte[] bytes = deterministicKey.getPrivKeyBytes();
        ECKeyPair keyPair = ECKeyPair.create(bytes);

        Address address = Address.createAddress(keyPair.getPrivateKey().toString(16), false);

有遇到疑惑的可加QQ群交流:1057160243

猜你喜欢

转载自blog.csdn.net/u010138906/article/details/114649679