数字货币钱包
.
点击注册
你的位置: 数字货币钱包 > usdt钱包 >

COSMOS主链钱包离线地址生成和离线签名

发布日期:2022-04-15 21:52    点击次数:118

COSMOS主链钱包离线地址生成和离线签名

一. 什么是 COSMOSusdt钱包

严格来说,COSMOS 是一个独立并行区块链的分散网络,每个区块链都由BFT共识算法(如Tendermint共识)提供支持。

换句话说,COSMOS 是一个新的区块链生态系统,可以相互扩展和互操作。 在 COSMOS 之前,区块链是孤立的,无法相互沟通。 它们很难构建,每秒只能处理少量事务。 COSMOS 通过新的技术愿景解决了这些问题。

二. COSMOS 相关资料

参考原文

三. COSMOS 节点搭建

四. COSMOS 钱包开发

1.生成地址和私钥

1.1. python 生成地址和私钥

import?hashlib from?secp256k1?import?PrivateKey import?bech32

def?generate_wallet(): ????privkey?=?PrivateKey().serialize() ????return?{ ????????"private_key":?privkey, ????????"public_key":?privkey_to_pubkey(privkey), ????????"address":?privkey_to_address(privkey), ????}

def?privkey_to_pubkey(privkey:?str)?->?str: ????privkey_obj?=?PrivateKey(bytes.fromhex(privkey)) ????return?privkey_obj.pubkey.serialize().hex()

def?pubkey_to_address(pubkey:?str)?->?str: ????pubkey_bytes?=?bytes.fromhex(pubkey) ????s?=?hashlib.new("sha256",?pubkey_bytes).digest() ????r?=?hashlib.new("ripemd160",?s).digest() ????return?bech32.bech32_encode("cosmos",?bech32.convertbits(r,?8,?5))

def?privkey_to_address(privkey:?str)?->?str: ????pubkey?=?privkey_to_pubkey(privkey) ????return?pubkey_to_address(pubkey)

wallet?=?generate_wallet() print(wallet)

执行结果如下:

{'private_key':?'bfbc2e98d50325b8783bb8c2188d1a92aa7d0fbec9feec304a9eb887115c354f',?'public_key':?'020a6be4ed72a3317bc8d148a2604a2b31c2d2c07405cacfcd175b68b9445ce42e',?'address':?'cosmos1zmja29jn8cqcf59yy968ze3tdet2zyl6gxh4e8'}

1.2. python 交易签名

import?base64 import?json from?secp256k1?import?PrivateKey from?address?import?privkey_to_address,?privkey_to_pubkey

class?Transaction: ????def?__init__(self,?*,?privkey:?str,?account_num:int,?sequence:int,?fee:int,?gas:int,?memo:str?=?"",?chain_id:?str?=?"cosmoshub-2",sync_mode?=?"sync"): ????????self.privkey?=?privkey ????????self.account_num?=?account_num ????????self.sequence?=?sequence ????????self.fee?=?fee ????????self.gas?=?gas ????????self.memo?=?memo ????????self.chain_id?=?chain_id ????????self.sync_mode?=?sync_mode ????????self.msgs?=?[] ????def?add_atom_transfer(self,?recipient:?str,?amount:?int)?->?None: ????????self.msgs.append( ????????????{ ????????????????"type":?"cosmos-sdk/MsgSend", ????????????????"value":?{ ????????????????????"from_address":?privkey_to_address(self.privkey), ????????????????????"to_address":?recipient, ????????????????????"amount":?[{"denom":?"uatom",?"amount":?str(amount)}], ????????????????}, ????????????} ????????)

def?_get_sign_message(self): ????????return?{ ????????????"chain_id":?self.chain_id, ????????????"account_number":?str(self.account_num), ????????????"fee":?{"gas":?str(self.gas),?"amount":?[{"amount":?str(self.fee),?"denom":?"uatom"}]}, ????????????"memo":?self.memo, ????????????"sequence":?str(self.sequence), ????????????"msgs":?self.msgs, ????????}

def?_sign(self)?->?str: ????????message_str?=?json.dumps(self._get_sign_message(),?separators=(",",?":"),?sort_keys=True) ????????message_bytes?=?message_str.encode("utf-8") ????????privkey?=?PrivateKey(bytes.fromhex(self.privkey)) ????????signature?=?privkey.ecdsa_sign(message_bytes) ????????signature_compact?=?privkey.ecdsa_serialize_compact(signature) ????????signature_base64_str?=?base64.b64encode(signature_compact).decode("utf-8") ????????return?signature_base64_str

def?get_pushable_tx(self)?->?str: ????????pubkey?=?privkey_to_pubkey(self.privkey) ????????base64_pubkey?=?base64.b64encode(bytes.fromhex(pubkey)).decode("utf-8") ????????pushable_tx?=?{ ????????????"tx":?{ ????????????????"msg":?self.msgs, ????????????????"fee":?{ ????????????????????"gas":?str(self.gas), ????????????????????"amount":?[{"denom":?"uatom",?"amount":?str(self.fee)}], ????????????????}, ????????????????"memo":?self.memo, ????????????????"signatures":?[ ????????????????????{ ????????????????????????"signature":?self._sign(), ????????????????????????"pub_key":?{"type":?"tendermint/PubKeySecp256k1",?"value":?base64_pubkey}, ????????????????????????"account_number":?str(self.account_num), ????????????????????????"sequence":?str(self.sequence), ????????????????????} ????????????????], ????????????}, ????????????"mode":?self.sync_mode, ????????} ????????return?json.dumps(pushable_tx,?separators=(",",?":"))

tx?=?Transaction( ????privkey="26d167d549a4b2b66f766b0d3f2bdbe1cd92708818c338ff453abde316a2bd59", ????account_num=11335, ????sequence=0, ????fee=1000, ????gas=37000, ????memo="", ????chain_id="cosmoshub-2", ????sync_mode="sync", )

tx.add_atom_transfer(recipient="cosmos103l758ps7403sd9c0y8j6hrfw4xyl70j4mmwkf",?amount=387000) pushable_tx?=?tx.get_pushable_tx() print(pushable_tx)

执行结果如下:

{"tx":{"msg":[{"type":"cosmos-sdk/MsgSend","value":{"from_address":"cosmos1lgharzgds89lpshr7q8kcmd2esnxkfpwvuz

—-usdt钱包



栏目分类
数字货币热门文章
  • 巴菲特投资比特币挖矿其实是增持黄金股

    17日北京时间凌晨,一条巴菲特投资比特币矿业的新闻在中文媒体疯传,尤其是中文矿工社群,而事情的真相究竟是什么?首先这当然不是真的,因为没有任何英文媒体或者可靠信...

  • 银行识别炒币资金有办法提现吗?

    数字币商家在接到转款后usdt钱包,第一时间登录个人网上银行支付宝钱包核查,确定收付款纪录的转款人名字全名与服务平台表明实名认证完全一致。属实名不一致则果断不收...

  • PayPal用户将能够将加密货币提取到外部钱包

    usdt钱包 在付款提供商透露它将允许用户将其数字资产提取到第三方钱包之后,PayPal对加密货币的拥抱似乎正在增长。 路透社周三下午报道了这一消息,距PayP...

  • 浅析数字钱包、交易所及区块浏览器间的融合

    usdt钱包 在区块链的世界里,时间密度很高,大家常听说的\"币圈一日,人间一年\"说的就是这个理,数字资产的交易也是1天24小时、1年365天交易,交易永不停...

  • 在比特币中创建多重签名钱包的新标准

    关键事实: 当前用于创建多签名钱包的方法彼此不同,并且存在安全漏洞。 开发涉及来自主要硬件钱包品牌的合作者。 5月15日的比特币可扩展性提案(BIP)中包括一种...