MOAC区块链钱包账户管理

墨客

本文简要介绍了钱包账户管理的一些方法

1,条款

1.1天然气、天然气限制和GasPICE

在莫赫尔区块链上,发送令牌或调用智能合同以及执行写入操作需要支付矿工计算费用,计算费用根据天然气计算。燃气使用moac支付无论调用的方法成功还是失败,都必须支付计算费用。即使失败了,矿工验证并执行交易(计算),所以矿工的费用必须像成功的交易一样支付。

天然气限额称为限额,即天然气用户在交易中愿意花费的最大金额。事务所需的气体是通过调用智能契约执行多少代码来定义的。如果你不想花太多的汽油,降低汽油限额不会有多大帮助。因为您必须包含足够的燃气来支付计算资源,否则交易将由于燃气不足而失败,并且您设置的所有燃气限制也将用完。当有足够的moac时,建议您将气体限制设置得尽可能高,所有未使用的气体将在传输结束时返还给您。

可以通过降低天然气价格来节省矿工的费用,但也会降低矿工的打包速度。矿业公司将优先考虑天然气价格设定较高的打包交易。如果你想加快传输速度,你可以把油价定得更高,这样你就可以排在最前面。如果你不着急,你只需要设定一个安全的天然气价格,矿工也会帮你打包交易。

1.2 moac单位

moac最小的单位是sha,最常用的单位是mc

墨客

1.3密钥库

密钥库是一个帐户的表达式,它包含一系列信息,如帐户的地址、帐户密文的私钥和MAC地址等。以下是密钥库的完整信息

墨客

1.5元交易

元交易是一种发送交易的方式:发送方先签署合法交易,然后通过下行传输将交易和签名传递给中继方。中继方愿意承担交易的燃气费用,并最终将交易发送到网络这种

元交易模式非常有用,因为发送方不再需要在发送账户中有moac,这从用户体验的角度来看非常有益。

元交易的最终目标地址通常是某个合同,在某种程度上,合同知道交易的签字人不是交易的实际发送人此时,交易应用编程接口的消息发送方字段将返回中继方的地址,但它可能不代表签署方的操作权限,因此在这种情况下(只需查看消息发送方字段),它没有多大意义。因此,许多元交易依赖于链上的签名验证(通过应用编程接口的电子签名验证功能),以确保签名者的账户确实在适当的白名单中(有权操作交易想要执行的指令)

1.6其他

现时:交易计数器,即账户主动发起的交易数,从0开始计算

助记词:通过算法从词典中生成12-24个单词,目前支持多种语言

随机种子:由使用助记符的算法生成的随机字符串

私钥:钱包中最重要的东西。wallet实际上管理私钥。现在私钥有主私钥和派生私钥之说

主私钥:钱包私钥,由助记符生成的随机种子生成。如果主私钥被盗,你钱包里的所有钱都会被盗。

派生私钥:由主私钥通过bip分层协议生成的私钥。如果导出的私钥丢失,则只有单个帐户上的数字资产会丢失

备份钱包:事实上,它也被称为备份助记符。今天的钱包基本上是用记忆术修复的

备份私钥:备份钱包的主私钥或派生私钥。钱包中的所有帐户都可以通过主私钥进行检索,并且只有一个帐户可以通过派生的私钥进行检索。

导入钱包:通过导入助记符或私钥生成以前的钱包

导入私钥:通过导入私钥生成多链多账户钱包或单链单账户钱包

单链钱包:仅支持一个链的钱包,如比特币钱包

多链钱包:支持所有货币的钱包

单账户钱包:每种货币只支持一个账户

多账户钱包:每种货币支持多个账户

地址:类似银行卡账户,可以通过该地址查询当前账户的余额。

公钥:每个人的公钥

签名:发起数字资产转移时,所有货币必须对转移的数据签名。不同货币的签名数据量不同

空投:分批投币。

bip协议簇:高清分层钱包的重要规则,是数字现金发展的必然产物

非确定性钱包:每个帐户对应一个私钥,这不容易管理。

确定性钱包:有一个主私钥。所有其他货币的私钥都可以通过主私钥生成,但不能支持多个帐户。

确定性分层钱包:有一个主私钥,通过它可以生成所有其他货币的私钥,支持多个帐户

2,开源库keythereum

Keythereum是一个用于生成、导入和导出密钥的JavaScript工具这提供了一种在本地和网络钱包中使用相同帐户的简单方法它可以用来验证和存储钱包。

密钥管理器使用相同的密钥派生函数(PBKDF2-SHA256或scrypt)、对称密码(AES-128-CTR或AES-128-CBC)和消息认证码您可以将生成的密钥导出到文件,将其复制到数据目录的密钥库中,然后立即在本地客户端中使用它

从0.5.0版开始,密钥管理器的加密和解密功能返回缓冲区而不是字符串对于那些直接使用这些功能的人来说,这是一个重大变化。

2.1使用密钥库生成密钥库:

在生成密钥库之前,您必须有一个节点Js环境并安装密钥库

或使用压缩的浏览器文件dist/keythereum.min.js在浏览器中使用使用代码介绍

生成一个新的随机私钥(256位)和盐(256位),由密钥派生函数使用,以用AES-128-CTR的初始化向量(128位)加密密钥如果传递了回调函数,创建是异步的;否则,它是同步的

下面是生成密钥库的代码:

墨客

运行结果:

墨客

2.2将密钥库保存到文件:

转储创建一个对象而不是JSON字符串在节点中,exportToFile方法提供了一种将该格式化密钥对象导出到文件的简单方法它在密钥库子目录中创建一个JSON文件,并使用geth的当前文件命名约定(ISO时间戳连接到密钥派生的以太网地址)

代码如下:

墨客

成功后,您将在您的密钥库目录中看到密钥库格式的帐户文件。如果有错误,最可能的原因是您的目录中没有密钥库目录。当然,您也可以在上面的代码中指定密钥库的存储目录。导入

2.3密钥库:从密钥库导入

密钥只能在节点上完成将JSON文件解析为与上面的keyObject具有相同结构的对象以下代码要求密钥库目录中已经存在密钥库格式的帐户文件从密钥库中恢复的

墨客

:

墨客

2.4私钥的操作结果:这里恢复的

私钥是缓冲格式,密码是您设置的密码,keyObject是密钥库运行结果

墨客

:

墨客

3,开源库eth-crypto

3.1安装

墨客

3.2创建帐户

节点运行以下代码,可以离线生成帐户,获取私钥、公钥和地址

const EtHCrypto = required(' eth-crypto ');const identity = EtHCrypto . CreateIdentity;//私钥、公钥和地址控制台. log(' private key:'+identity . private key)可以直接显示;console . log(' PublicKey:'+identity . PublicKey);console . log(' address:'+identity . address);/* >。private key:0xAFD2F 1a 57103993 c 16 e 2318 f 45206417 C5 cf 840 bb 204603912 b 8 DC 54 b 7d 8800 public key:37 b 7 D6 B1 b 7 BC 05947d 42 ecfd 3 b 63 de E6 CD 54 ff 3 ebfd 5 c 6637 f 3224 f 45d 05 C2 F4 ad0 b 8 ffea 1 abd2 c 23139656662 cf 7d 7a 0var PrivateKey = " 0x AFD 2 fa 1a 57103993 c 16 e 2318 f 45206417 C5 cf 840 bb 204603912 b 8dc 54 b 7d 8800 ";//从私钥获取公钥constpublickey = ethcrypto。console . log(' PublicKeyByPrivateKey:'+PublicKey);/* >。publicKeyByPrivateKey:37 b 7 D6 B1 b 7b C 05947d 42 ecfd 3 b 63 dee 6 CD 54 ff 3 ebfd 5c 6637 f 3224 f 45d 05 C2 F4 ad 0 b 8 ffea 1 abd2 C 2313965662 CDF 7a 09 e 2 C 9 DD 683 EEC 4 eeab 4b 19838 e 01 b 9 f1 C */

3.4 get address

consteh crypto = require(' s)const PublicKey = " 37 b 7 D6 B1 b 7b c 05947d 42 ecfd 3 b 63 dee 6 CD 54 ff 3 ebfd 5c 6637 f 3224 f 45d 05 C2 F4 ad 0 b 8 ffea 1 Abd 2c 2313965662 CDF 7a 09 e 2c 9 DD 683 EEC 4 eeab 4b 19838 e 01 b 9 fc ";//从公钥获取地址常量address = ethcrypto . public key . to address(public key );console . log(' AddressByPublicKey:'+address);/* >。按公钥地址:0x 16 f 119734 f 845 a 5348 DD 37175 ca 81059 e 66 c 90 B3 */

3.5签名

const eth crypto = require(' eth-crypto ');const PrivateKey = " 0x AFD 2 fa 1a 57103993 c 16 e 2318 f 45206417 C5 cf 840 bb 204603912 b 8dc 54 b 7d 8800 ";const message = '你好,世界!;const MessageHash = EtHCrypto . hash . keccak 256(消息);常量签名= EthCrypto.sign(私有密钥,消息哈希);console.log('签名:'+签名);/*签名:0x 6f 9188 a 50 f 13d 75 FD 64 df 378 f 11 b 025 a 48 f 089 f1 d 51d 60264 e 84 f 3690d 9 FD 6 c 6117 abff 827 b 06 ab 9 de 98 e 9 c 2837 D6 d 9 a 6451 ed 113 cf 4492 c8 e 2 BD 377 BF 51 c */

3.6从签名信息中获取地址

。这里需要明文信息

const EtHCrypto = required(' eth-crypto ');const signature = " 0x 6 f 9188 a 50 f 13d 75 FD 64 df 378 f 11 b 025 a 48 f 089 f1 d 51d 60264 e 84 f 3690d 9 FD 6 c 6117 abff 827 b 06 ab 9 de 98 e 9 c 2837 D6 d 9 a 6451 ed 113 cf 4492 c8 e 28 a 4e 2 BD 377 BF 51 c ";const signer = EthCrypto.recover(签名,EtHCrypto . hash . keccak 256(' hello,world!');console . log(' signer:'+signer);/*签名人:0x 16 f 119734 f 845 a 5348 DD 37175 ca 81059 e 66 c 90 B3 */

3.7从签名信息中获取公钥

此处需要明文信息

const EtHCrypto = required(' eth-crypto ');const signature = " 0x 6 f 9188 a 50 f 13d 75 FD 64 df 378 f 11 b 025 a 48 f 089 f1 d 51d 60264 e 84 f 3690d 9 FD 6 c 6117 abff 827 b 06 ab 9 de 98 e 9 c 2837 D6 d 9 a 6451 ed 113 cf 4492 c8 e 28 a 4e 2 BD 377 BF 51 c ";const signer = EtHCrypto . recoverPublicKey(签名,EtHCrypto . hash . keccak 256(' hello,world!');console . log(' signer:'+signer);/*签名人:37 b 7 D6 B1 b 7b c 05947d 42 ecfd 3 b 63 dee 6 CD 54 ff 3 ebfd 5c 6637 f 3224 f 45d 05 c2f 4 ad 0 b 8 ffea 1 Abd 2c 2313965662 CFD 7a 09 e 2c 9 DD 683 EEC 4 eeab 4b 19838 e 01 B9 f1c */

4。交易

4.1交易确认

在我们的区块链询价中不是交易,这表明交易已经成功。油墨客户默认确认12次后,交易几乎不会被篡改。如何计算确认时间?

确认=当前区块高度-在区块高度进行交易的注意事项+1

:交易可能是孤立的。当执行此公式时,有必要验证此事务是否仍在该块上并已回滚

交易的燃气费是常识。它可以给用户一些参考值,并允许他们选择他们愿意支付的手续费。最笨拙和有效的方法是定期观察区块链天然气价格的大致范围,并动态调整价格。gasLimit在不影响交易的情况下尽可能多一点,因为如果不使用,这一部分将返回到交易启动帐户。在

4.2事务中,nonce维护

转移地址的合法性检查。这种合法性检查可以避免许多后续问题,例如维护nonce值。对于

交易,金额检查和现时值检查(现时值遇到的问题已经在前面提到过了),特别是在私钥从节点分离后自己维护私钥时,将是一个大问题。例如,前一次交易失败,现在需要退款。此时,后一个事务已经发出,因为前一个随机数没有被补充,后一个事务将在很长时间内不被处理。所有这些都需要对业务进行特殊的判断和处理。

查询地址随机数mc.getTransactionCount

4.3交易记录

ink区块链只能通过遍历大宗交易判断是否有对应账户的交易相关操作步骤主要包括:

*查询块高,比较是否是新生成的块,mc.blockNumber

*检查块内容和详细交易,mc.gethBlock

*比较交易的地址是否是钱包的地址,如果是,将交易记录到数据库,并记录交易状态(确认时间等。);

*保证了仓储和记账的幂等性,因为同一笔交易将被查询多次。对于钱包开发,

*实际上需要分析所有交易,并将它们保存到数据库中以供将来参考。

墨客

大家都在看

相关专题