前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NEO 交易所钱包开发之离线签名【区块链】 顶

NEO 交易所钱包开发之离线签名【区块链】 顶

作者头像
kinbug [进阶者]
发布2019-04-01 14:50:52
1.5K0
发布2019-04-01 14:50:52
举报
文章被收录于专栏:IT进修之路IT进修之路

前言:

        在2019年的3月之前我对铺天盖地的“区块链”网络风暴,都只是一个耳朵进另一个就帮忙给丢了...可3月中旬的时候一份工作让我决定去接触他,毕竟马大爷说过:在未来只有人工智能(AI)和区块链......我接到的第一个命令是做NEO(小蚁币)的冷钱包,可是我看了官网连签名都没的,更不要说什么冷钱包了,网上的资料收到的都是些没的多大用处的东西...好方啊不过入职的第一个任务就要逃避了吗?静下心来慢慢看吧?

        在开发一个币,你一定要熟悉他的交易流程,那样你才不会走弯路...因为我走了太多了

第一步:下载客服端创建一个属于自己钱包

        下载地址:https://github.com/neo-project/neo-gui/releases 我下载的:neo-gui-windows.zip(创建钱包那些就不说了呗,都是中文的,如果不会就放弃吧,把这步创建的钱包叫A)

        创建钱包前吧钱包客服端变成测试网的参考:https://docs.neo.org/zh-cn/network/testnet.html

第二步:申请测试币

        申请地址:https://neo.org/testcoin/apply 注意最后面的公钥一定要填第一步中创建钱包后的地址对应的公钥,这样你才有这个公钥,不然你拿了测试币用不了(我就是吃了这个亏的),申请好了你就去看看他需求文档那些吧,一直等到你收到测试B的邮件。

第三步:根据邮件创建多重签名地址和转账

        第一步中已经有链接说过多重签名了转账了,你直接往你第一步中转。再往你新创建的钱包转,你发现这些都是不的出现没的私钥签名的步骤的,都是直接签名成功的。         现在重新创建一个新的钱包B,吧生成的地址干掉,直接创建合约地址。把里面的钱转到A,得到如图下

这一步很重要,拷贝出来保存好,后面分析数据,看明白别人的签名dome都有很大的帮助。

第四步:签名和广播

        在第一步的钱包中进行签名(合约地址必须在哦,不然你的钱包和转账的地址没的关系,也是不能签名的)如图下:

你看交易就成功了。不过这个是客服端的,与我们要实现的离线签名关系不大啊,放心磨刀不误砍柴工工.....

第五步:下载大神的dome

        我也在看这个地址的时候:https://www.jianshu.com/p/286c3cca3048(里面有很的多东西)         在里面的社区爱好中找到了:Guil博士在NEO DevCon介绍Neow3j Java库         去下载项目:https://github.com/neow3j/neow3j         里面官方的api基本都是实现了的,也有没实现得哈

第六步:分析

这步就很重要的了,找到dome中的io.neow3j.examples.ransactions.CreateRawTransactionMultiSig.java,这个就是签名的东西了,就是我在客服端签名转账的java内容了....这个是个多重签名(这个就不多做解释了百度哈)现在研究一下这些数据是什么意思:

wif是钱包的私钥,通过钱包就可以查到,在io.neow3j.examples.utils.LoadWallet可以获得 ecKeyPair3是多余的可以干掉,如果你只签名一次,ecKeyPair2也可以干掉。 资产id的获取:neow3j.getAccountState

现在 说说:输出的地址是什么?我把客服端的交易拿来解析:地址:https://sdk.nel.group/#解析签名钱的那个记录(我说保存好的那个)中的hex,放到链接中的交易解析,我开始以为是私钥,我加入了,签名ok,广播就错误了,多交易验证出错大致这个意思吧。在这墨迹了很长时间......于是重新看官方文档发型neo是UTXO(百度明白是什么意思)的,于是我查了地址信息:https://neoscan-testnet.io/api/test_net/v1/get_balance/加签名地址     发型了unspent.txid,估计就是他了,试了下,广播成功了,币交易成功了。与是我加入到我的离线签名项目中(只实现一次签名):

终结:完成离线签名

代码语言:javascript
复制
@RequestMapping("/neo/offline")
public class NeoController {
    @Autowired
	public NeoInfo NeoInfo;
    
    @ApiOperation(value = "NEO离线签名", notes = "NEO离线签名")
	@RequestMapping(value="/sign", method = RequestMethod.GET)
    public String sign(NeoParam param) {
		ECKeyPair ecKeyPair = ECKeyPair.create(WIF.getPrivateKeyFromWIF(NeoInfo.getWif()));
		
		String multiSigAddress = Keys.getMultiSigAddress(1,ecKeyPair.getPublicKey());
		
		RawVerificationScript verificationScript = Keys.getVerificationScriptFromPublicKey(1,ecKeyPair.getPublicKey());
		
		RawTransaction rawTx = RawTransaction.createContractTransaction(
                null,
                null,
                Arrays.asList(
                        new RawTransactionInput(param.getUnspentTxid(), 0)
                ),
                Arrays.asList(
                        new RawTransactionOutput(0, param.getOutputAssetId(), param.getOutValue(), param.getInputAddress()),
                        new RawTransactionOutput(1, param.getOutputAssetId(), param.getChangeValue(), multiSigAddress)
                )
        );
		// 序列化基本原始事务
        // 重要:没有脚本!
        byte[] rawTxUnsignedArray = rawTx.toArray();

        // 在三种可能的签名中添加两个签名——这里的顺序很重要!
        List<RawInvocationScript> rawInvocationScriptList = new ArrayList<>();
        rawInvocationScriptList.add(new RawInvocationScript(Sign.signMessage(rawTxUnsignedArray, ecKeyPair)));
        rawTx.addScript(rawInvocationScriptList, verificationScript);
        byte[] rawTxSignedArray = rawTx.toArray();
		return Numeric.toHexStringNoPrefix(rawTxSignedArray);
    }
}

第一次接触数字货币,很多专业术语都不知道,走了很多的弯路,后续继续努力,开始别的币了..... 有开发钱包的加群:340697945,答案回 钱包,大家一起交流学习。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 第一步:下载客服端创建一个属于自己钱包
  • 第二步:申请测试币
  • 第三步:根据邮件创建多重签名地址和转账
  • 第四步:签名和广播
  • 第五步:下载大神的dome
  • 第六步:分析
  • 终结:完成离线签名
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档