V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myrual
V2EX  ›  推广

Python 比特币教程第三课: 创建比特币钱包,读余额,极速免费转账,标准转账

  •  
  •   myrual · 2019-02-26 13:06:50 +08:00 · 1832 次点击
    这是一个创建于 2107 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们已经创建过一个回复消息的机器人和一个能自动支付比特币的机器人.

    通过本教程的学习,你可以学到如下内容

    1. 如何创建一个比特币钱包.
    2. 如何读取比特币钱包的余额.
    3. 如何实现免手续费支付比特币并 1 秒到账
    4. 如何将 Mixin Network 的比特币提现到你的冷钱包或第三方交易所.

    通过 Mixin Network Python SDK 创建一个比特币钱包

    前期准备:你要有一个 Mixin Network 账户。如果没有账户,一行代码就能创建一个

      userInfo = mixinApiBotInstance.createUser(session_key.decode(),"Tom Bot")
    

    上面的语句会在本地创建一个 RSA 密钥对,然后调用 Mixin Network 来创建帐号,最后输出帐号信息.

    //Create User api include all account information
    userInfo.get("data").get("pin_token"),
    userInfo.get("data").get("session_id"),
    userInfo.get("data").get("user_id"),
    

    帐号创建成功后结果如下:

    {'data': {'type': 'user', 'user_id': '2f25b669-15e7-392c-a1d5-fe7ba43bdf37',
    'identity_number': '0', 'full_name': 'Tom Bot', 'avatar_url': '',
    'relationship': '', 'mute_until': '0001-01-01T00:00:00Z',
    'created_at': '2019-02-22T06:23:41.754573722Z', 'is_verified': False,
    'session_id': '284c7b39-3284-4cf6-9354-87df30ec7d57', 'phone': '',
    'pin_token': 'g4upUgBXa8ATk7yxL6B94HgI4GV4sG4t8Wyn6uTu2Q2scH11UMQ5bYDb6Md+3LRQqRjEdRFcLlHijXGBihRweTaKTZjHQqolWbZcffesVIias6WppV/QMu4TzXCuKa5xpj3uhjL+yPyfWTLGUaVJTJN9n7PQmHSIUBXrovbfodk=',
    'invitation_code': '', 'code_id': '', 'code_url': '', 'has_pin': False,
    'receive_message_source': 'EVERYBODY', 'accept_conversation_source': 'EVERYBODY'}}
    

    现在你需要小心保管好你的帐号信息,在读取该账户的比特币资产余额或者进行其他操作时,将需要用到这些信息.

    给新建的帐号创建一个比特币钱包

    新账号并不默认内置比特币钱包, 现在读一下比特币余额就可以创建一个比特币钱包。

    def readAssetAddress(asset_id,isBTC = True):
        with open('new_users.csv', newline='') as csvfile:
            reader  = csv.reader(csvfile)
            for row in reader:
                pin         = row.pop()
                userid      = row.pop()
                session_id  = row.pop()
                pin_token   = row.pop()
                private_key = row.pop()
                mixinApiNewUserInstance = generateMixinAPI(private_key,
                                                            pin_token,
                                                            session_id,
                                                            userid,
                                                            pin,"")
                btcInfo = mixinApiNewUserInstance.getAsset(asset_id)
                print(btcInfo)
                if isBTC:
                    print("Account %s \'s Bitcoin wallet address is %s  " %(userid,btcInfo.get("data").get("public_key")))
                else:
                    print("Account %s \'s EOS account name is %s, wallet address is %s  " %(userid,
                                                                            btcInfo.get("data").get("account_name"),
                                                                            btcInfo.get("data").get("account_tag")))
    

    创建的帐号的比特币资产详细信息如下,其中 public key 就是比特币的存币地址:

    {'data': {'type': 'asset', 'asset_id': 'c6d0c728-2624-429b-8e0d-d9d19b6592fa',
    'chain_id': 'c6d0c728-2624-429b-8e0d-d9d19b6592fa',
    'symbol': 'BTC', 'name': 'Bitcoin',
    'icon_url': 'https://images.mixin.one/HvYGJsV5TGeZ-X9Ek3FEQohQZ3fE9LBEBGcOcn4c4BNHovP4fW4YB97Dg5LcXoQ1hUjMEgjbl1DPlKg1TW7kK6XP=s128',
    'balance': '0',
    'public_key': '12sJHR7HJPMt33KwSHyxQvYqGGUEbVGREf',
    'account_name': '', 'account_tag': '', 'price_btc': '1',
    'price_usd': '3879.88117389', 'change_btc': '0',
    'change_usd': '0.017333475714793264',
    'asset_key': 'c6d0c728-2624-429b-8e0d-d9d19b6592fa',
    'confirmations': 12, 'capitalization': 0}}
    Account a8cefb2e-cb93-338f-aba7-32a3a635ad02 's Bitcoin wallet address is 12sJHR7HJPMt33KwSHyxQvYqGGUEbVGREf
    

    这个 API 能够提供若干与比特币有关的信息:

    • 存币地址:[public_key]
    • Logo: [icon_url]
    • 资产名字:[name]
    • 资产在 Mixin Network 的 uuid: [asset_key]
    • 对美元的价格(Coinmarketcap.com 提供): [price_usd]
    • 存币时确认的区块数量:[confirmations]

    比特币私钥呢?

    比特币的私钥呢?这个私钥被 Mixin Network 通过多重签名保护,所以对用户来说是不可见的,比特币资产的提现和转账都需要用户提供正确的的 RSA 签名,PIN 代码与会话密钥才能完成.

    不只是比特币,还有以太坊,EOS 等

    这个帐号不只支持比特币,还支持以太坊,EOS 等, 完整的区块链支持列表. 这个账户同时也支持所有的 ERC20 代币与 EOS 代币.

    创建其它的币的钱包与创建比特币钱包过程一样,读对应的资产余额就可以.

    EOS 的存币地址与其它的币有些不同,它由两部分组成:account_name and account tag, 如果你向 Mixin Network 存入 EOS,你需要填两项数据:account name 是eoswithmixin,备注里输入你的 account_tag,比如0aa2b00fad2c69059ca1b50de2b45569.

    EOS 的资产余额返回结果如下:

    {'data': {'type': 'asset', 'asset_id': '6cfe566e-4aad-470b-8c9a-2fd35b49c68d',
    'chain_id': '6cfe566e-4aad-470b-8c9a-2fd35b49c68d',
    'symbol': 'EOS', 'name': 'EOS',
    'icon_url': 'https://images.mixin.one/a5dtG-IAg2IO0Zm4HxqJoQjfz-5nf1HWZ0teCyOnReMd3pmB8oEdSAXWvFHt2AJkJj5YgfyceTACjGmXnI-VyRo=s128',
    'balance': '0', 'public_key': '',
    'account_name': 'eoswithmixin', 'account_tag': '70dae97b661ca9f80cb0e6549feeba6c',
    'price_btc': '0.00092392', 'price_usd': '3.58276497',
    'change_btc': '-0.019294922814297986', 'change_usd': '-0.0033825963089133683',
    'asset_key': 'eosio.token:EOS', 'confirmations': 64, 'capitalization': 0}}
    Account a8cefb2e-cb93-338f-aba7-32a3a635ad02 's EOS account name is eoswithmixin, wallet address is 70dae97b661ca9f80cb0e6549feeba6c
    

    存入比特币与读取比特币余额

    现在,你可以向比特币的钱包存币了。

    当然,在比特币网络里转币,手续费是相当贵的,费用的中位数在 0.001BTC,按当前 4000 美元的价格,在 4 美元左右,有一个方便的办法,如果你有Mixin Messenger帐号,里面并且有比特币的话,可以直接提现比特币到新创建的帐号的比特币充值地址,它们在同一个 Mixin Network 网络内,手续费为 0,而且 1 秒到账。

    下面的代码,可以读取比特币钱包余额.

    btcInfo = mixinApiNewUserInstance.getAsset(asset_id)
    print("Account %s \'s balance is %s  " %(userid,btcInfo.get("data").get("balance")))
    

    Mixin Network 网内免手续费的,并且即时确认

    任何币在 Mixin Network 内部的交易,都是无手续费的,并且立刻到账。 前期准备: 账户设置了 PIN

    对于新创建的帐号,我们通过 updatePin 来设置新 PIN 码, 代码如下:

    pinInfo = mixinApiNewUserInstance.updatePin(PIN,"")
    print(pinInfo)
    

    Mixin Network 帐号之间的比特币支付

    通过 Mixin Messenger,我们可以先转比特币给机器人,然后让机器人转币给新用户。

    mixinApiNewUserInstance = generateMixinAPI(private_key,
                                                pin_token,
                                                session_id,
                                                userid,
                                                pin,"")
    btcInfo = mixinApiBotInstance.transferTo(MASTER_UUID, BTC_ASSET_ID, AMOUNT, "")
    print(btcInfo)
    

    读取 Bitcoin 的余额,来确认比特币是不是转成功了! 注意**$mixinSdkNew**是新用户的。

    btcInfo = mixinApiNewUserInstance.getAsset(asset_id)
    print("Account %s \'s balance is %s  " %(userid,btcInfo.get("data").get("balance")))
    

    如何将比特币存入你的冷钱包或者第三方交易所

    如果你希望将币存入你的冷钱包或者第三方交易所, 先要得到冷钱包或者你在第三方交易所的钱包地址,然后将钱包地址提交到 Mixin Network.

    • 要点提示: 提现是需要支付收续费的,准备好比特币包地址!

    增加目的钱包地址到 Mixin Network

    调用 createAddress API, 将会返回一个 address_id,下一步的提现操作会用到这个 id。

    BTC_ASSET_ID    = "c6d0c728-2624-429b-8e0d-d9d19b6592fa";
    EOS_ASSET_ID    = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d";
    BTC_WALLET_ADDR = "14T129GTbXXPGXXvZzVaNLRFPeHXD1C25C";
    btcInfo = mixinApiBotInstance.createAddress(BTC_ASSET_ID, BTC_WALLET_ADDR,"BTC","","")
    print(btcInfo)
    

    这里的 14T129GTbXXPGXXvZzVaNLRFPeHXD1C25C 就是一个比特币钱包地址, 如下所示,提现费用是 0.0034802 BTC, address_id 是"345855b5-56a5-4f3b-ba9e-d99601ef86c1".

    {'data': {'type': 'address',
    'address_id': '47998e2f-2761-45ce-9a6c-6f167b20c78b',
    'asset_id': 'c6d0c728-2624-429b-8e0d-d9d19b6592fa',
    'public_key': '14T129GTbXXPGXXvZzVaNLRFPeHXD1C25C', 'label': 'BTC',
    'account_name': '', 'account_tag': '',
    'fee': '0.0034802', 'reserve': '0', 'dust': '0.0001',
    'updated_at': '2019-02-26T00:03:05.028140704Z'}}
    

    如果你操作的是 EOS, 示例代码如下:

    EOS_ASSET_ID     = "6cfe566e-4aad-470b-8c9a-2fd35b49c68d";
    EOS_WALLET_ADDR  = "3e2f70914c8e8abbf60040207c8aae62";
    EOS_ACCOUNT_NAME = "eoswithmixin";
    eosInfo = mixinApiBotInstance.createAddress(EOS_ASSET_ID, "","",EOS_ACCOUNT_NAME,EOS_WALLET_ADDR)
    print(eosInfo)
    

    创建提现地址成功后,你可以用 readAddress 读取最新的提现费。

    addr_id = btcInfo.get("data").get("address_id")
    addrInfo = mixinApiBotInstance.getAddress(addr_id)
    print(addrInfo)
    

    提交提现请求,Mixin Network 会即时处理提现请求.

    提交提现请求到 Mixin Network, $btcInfo["address_id"]就是 createAddress 创建的。

      mixinApiBotInstance.withdrawals(btcInfo.get("data").get("address_id"),AMOUNT,"")
    

    可以通过 blockchain explore 来查看进度.

    完整的代码在这儿

    1 条回复    2019-02-26 13:15:43 +08:00
    myrual
        1
    myrual  
    OP
       2019-02-26 13:15:43 +08:00
    标题里面有比特币就直接进比特币板块么,我已经选择了推广了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:20 · PVG 03:20 · LAX 11:20 · JFK 14:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.