Package: cyberpy
cyberpyVersion 1.0.9Tools for Cyber wallet management and offline transaction signingBostrom network releaseInstallingInstalling from PyPIrepository:pipinstallcyberpyInstalling from source code:gitclonehttps://github.com/SaveTheAles/cyberpycdcyberpy
pip3install.UsageGenerating a walletfromcyberpyimportgenerate_walletwallet=generate_wallet()The value assigned towalletwill be a dictionary just like:{"seed":"arch skill acquire abuse frown reject front second album pizza hill slogan guess random wonder benefit industry custom green ill moral daring glow elevator","derivation_path":"m/44'/118'/0'/0/0","private_key":b'\xbb\xec^\xf6\xdcg\xe6\xb5\x89\xed\x8cG\x05\x03\xdf0:\xc9\x8b\x85\x8a\x14\x12\xd7\xa6a\x01\xcd\xf8\x88\x93',"public_key":b"\x03h\x1d\xae\xa7\x9eO\x8e\xc5\xff\xa3sAw\xe6\xdd\xc9\xb8b\x06\x0eo\xc5a%z\xe3\xff\x1e\xd2\x8e5\xe7","address":"bostrom1uuhna3psjqfxnw4msrfzsr0g08yuyfxesqggqd",}Converter functionsMnemonic seed to private keyfromcyberpyimportseed_to_privkeyseed="teach there dream chase fatigue abandon lava super senior artefact close upgrade"privkey=seed_to_privkey(seed,path="m/44'/118'/0'/0/0")Private key to public keyfromcyberpyimportprivkey_to_pubkeyprivkey=bytes.fromhex("6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa")pubkey=privkey_to_pubkey(privkey)Public key to addressfromcyberpyimportpubkey_to_addresspubkey=bytes.fromhex("03e8005aad74da5a053602f86e3151d4f3214937863a11299c960c28d3609c4775")addr=pubkey_to_address(pubkey)Private key to addressfromcyberpyimportprivkey_to_addressprivkey=bytes.fromhex("6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa")addr=privkey_to_address(privkey)Address to addressfromcyberpyimportaddress_to_addressaddr=address_to_address(address,prefix)Signing transactionsSend transactionfromcyberpyimportTransactiontx=Transaction(privkey=bytes.fromhex("26d167d549a4b2b66f766b0d3f2bdbe1cd92708818c338ff453abde316a2bd59"),account_num=11335,sequence=0,fee=0,gas=200000,memo="",chain_id="bostrom-testnet-1",sync_mode="broadcast_tx_sync",# "broadcast_tx_sync", "broadcast_tx_async", "broadcast_tx_commit")tx.add_transfer(recipient="bostrom103l758ps7403sd9c0y8j6hrfw4xyl70j4mmwkf",amount=387000)tx.add_transfer(recipient="bostrom1lzumfk6xvwf9k9rk72mqtztv867xyem393um48",amount=123)One or more token transfers can be added to a transaction by calling theadd_transfermethod.Link transactionfromcyberpyimportTransactiontx=Transaction(privkey=bytes.fromhex("26d167d549a4b2b66f766b0d3f2bdbe1cd92708818c338ff453abde316a2bd59"),account_num=11335,sequence=0,fee=0,gas=200000,memo="",chain_id=bostrom-testnet-1",sync_mode="broadcast_tx_sync",# "broadcast_tx_sync", "broadcast_tx_async", "broadcast_tx_commit")tx.add_cyberlink(cid_from="QmceNpj6HfS81PcCaQXrFMQf7LR5FTLkdG9sbSRNy3UXoZ",cid_to="QmRX8qYgeZoYM3M5zzQaWEpVFdpin6FvVXvp6RPQK3oufV")tx.add_cyberlink(cid_from="QmXsJKAog3tTNEGfHNmSYjdiLYFkq4URrxDpMQpwfBRUtP",cid_to="QmTiXybNXEYbfVEy6bhBSw67u6NHXsB2h36xhwPcCQyRgp")One or more cyberlink messages can be added to a transaction by calling theadd_cyberlinkmethod.When the transaction is fully prepared, callingget_pushablewill return a signed transaction in the form of a JSON string.pushable_tx=tx.get_pushable()This can be used as request body when calling endpoint of thehttps://grpc_api:26657, more detaileshereimportrequestsres=requests.post(url=<grpc_api>,data=pushable_tx)Or you can callbroadcast(grps: str)method and it will make a signed transaction and POST it with defined gRPC_api.res=tx.broadcast(url=<gRPC_api>)Signing messageOffchain signing transaction-like according toADR 036string message signing:fromcyberpy._message_signerimportMessagefromcyberpy._walletimportseed_to_privkeyseed="arch skill acquire abuse frown reject front second album pizza hill slogan guess random wonder benefit industry custom green ill moral daring glow elevator"msg=Message(privkey=seed_to_privkey(seed))msg.add_message('some_string_here','prefix')//asprefixitshouldbebostrom,cosmos,osmoetc.signed_msg=msg.get_signed_message()list of strings message signing:fromcyberpy._message_signerimportMessagefromcyberpy._walletimportseed_to_privkeyseed="arch skill acquire abuse frown reject front second album pizza hill slogan guess random wonder benefit industry custom green ill moral daring glow elevator"msg=Message(privkey=seed_to_privkey(seed))strings_list=['some','string','here']//willhave:separatedstringmsg.add_message_custom(strings_list,'prefix')signed_msg=msg.get_signed_message()the output like:{"pub_key":"A+MXFp7YeLMvoVlAU66Uu0z3Wtc9Cuwq0eocUhtNOmnw","signature":"9O89CUdRRZj011BphnTs5JnYM9/0O0ch+XLG2DNiWqtYnA4xA5B0wmFQDOQogOxL5xKWILVMnv1IA/7s05QsIA=="}