# Aptos PythonSDK链上钱包创建验证问题

By [Psycho Labs](https://paragraph.com/@ljzbtc) · 2022-10-30

---

[liujinge@skiff.com](mailto:liujinge@skiff.com)

### 00 更新

* * *

### 01 起因

* * *

*   准备写个Aptos的脚本去抢NFT 发现本地创建的钱包没有在主网没有创建，不能查余额也转不了账。（没想到解决这个问题一个早上就过去了）
    

![先去看官方的GIthub的Issues发现7.8个相关地址激活的问题，只有一个回答是有点用的。](https://storage.googleapis.com/papyrus_images/67c40c1b693f398c84c600c5ac59047271f2eeed8e2d6488542c87a982502082.png)

先去看官方的GIthub的Issues发现7.8个相关地址激活的问题，只有一个回答是有点用的。

*   在转账时激活账户 —(关键是我都转不了账啊。。。）
    
*   或者用插件钱包去转一次钱，就能用了。(科学家怎么能用ui呢。。)
    
*   但都没有给出具体完整的解决方法
    

### 02 解决方式

* * *

*   无赖只好自己啃下文档，最后发现可调用[官方文档](https://aptos.dev/guides/interacting-with-the-aptos-blockchain/#creating-a-new-account)中给出的函数自己构造交易
    

![](https://storage.googleapis.com/papyrus_images/06961633e723ee6d4165305d69f31813523cc63000086abda6833568704ba3c2.png)

*   这个过程中有2个坑
    
    *   官方文档给出要传2个参数，但sdk里只接受一个参数。
        
    *   虽然可以 使用`0x1::aptos_account::transfer` 函数在转账时一起激活钱包但，gas并没有便宜太多，所以还是选择在创建钱包时就激活。
        

![](https://storage.googleapis.com/papyrus_images/88043a496c4943e19fe12dc683f102218a9f4bac9ac32829dac0ac3a70bf3f2d.png)

*   完整代码如下
    
        """
        create in   : 2022/10/30 14:10
        @author     : Psycholab.ljz
        @description:本地创建钱包并进行激活
        """
        
        from aptos_sdk.account import Account
        from aptos_sdk.client import RestClient
        from common import MAINNET_NODE_URL
        
        def activate_wallet_payload(address: [str]):
            payload = {
                "type": "entry_function_payload",
                "function": "0x1::aptos_account::create_account",
                "type_arguments": [],
                "arguments": [
                    str(address),
                ]
            }
        
            return payload
        
        def create_wallet(filename: [str], number: [int]):
            main = Account.load(f'wallet/main.txt')
            print(f"===本地创建 {number} 个新钱包===\\n 【 保存为: {filename}_x.txt 】")
            for i in range(number):
                Account.generate().store(f'wallet/{filename}_{i}.txt')
            print(f"===连接节点===\\n 【 {MAINNET_NODE_URL} 】")
            rest_client = RestClient(MAINNET_NODE_URL)
        
            print(f"===在链上激活钱包===\\n")
        
            for i in range(number):
                account_name = Account.load(path=f'wallet/{filename}_{i}.txt')
        
                print(f"===在链上激活钱包 {filename}_{i}===\\n")
        
                txn_hash = rest_client.submit_transaction(main, activate_wallet_payload(account_name.address()))
                rest_client.wait_for_transaction(txn_hash)
        
                print(f"===钱包 {filename}_{i} 激活成功===\\n")
        
            rest_client.close()
        
        create_wallet("test",1)
        
    

### 03 后续

* * *

1.  有空的时候写下文档，并在github进行提交这个修改，增加一个激活函数到Account中。
    
2.  为什么要激活才能用呢？官方文档写的是防止账户被广泛占用。对于那些撞地址的仔来说，确实0.0015 APT 的gas有点顶不住。

---

*Originally published on [Psycho Labs](https://paragraph.com/@ljzbtc/aptos-pythonsdk)*
