├── Python ├── MultiSigExample ├── README.md ├── NFTtutorial │ ├── README.md │ ├── manage.py │ ├── lock.py │ ├── send.py │ ├── trust.py │ └── create.py ├── multisigTX ├── payment.py ├── crawler.py ├── keyfunc.py ├── AssetCreate.py └── operationBind.py └── README.md /Python/MultiSigExample: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Python/README.md: -------------------------------------------------------------------------------- 1 | # pi-network 2 | Submit payment BY Python 3 | 4 | You should install some library 5 | 6 | ``pip install mnemonic`` 7 | 8 | ``pip install -U stellar-sdk`` 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pi-network 2 | All Project is made by Pionner:0205miss 3 | 4 | The sdk is import from other authors: 5 | 6 | 1. mnemonic 7 | 8 | 2. stellar-sdk 9 | 10 | 3. bip39 11 | -------------------------------------------------------------------------------- /Python/NFTtutorial/README.md: -------------------------------------------------------------------------------- 1 | # pi-network 2 | Create NFT BY Python 3 | 4 | You should install some library 5 | keyfunc.py should put in the same folder 6 | 7 | ``pip install mnemonic`` 8 | 9 | ``pip install stellar-sdk==4.1.0`` 10 | 11 | Need to prepare 12 | 13 | two account(issuer and seller) 14 | 15 | the base test pi in issuer >30.0x (that base on how much operation you need) 16 | 17 | # Flow 18 | 19 | create.py --> 20 | 21 | trust.py(change trust) --> 22 | 23 | send.py(payment) --> 24 | 25 | manage.py(data operation) --> 26 | 27 | lock.py(not necessary step, only for stopping issuing) 28 | 29 | # Mention 30 | Server should change to ``https://api.testnet.minepi.com/`` if you don't have a node api service. 31 | 32 | It is possible to bind the operation together by using multiple `.append_operation(operation)` 33 | -------------------------------------------------------------------------------- /Python/NFTtutorial/manage.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server,Keypair,TransactionBuilder, Network ,Asset 2 | import requests 3 | server = Server("http://127.0.0.1:31401/")#https://api.testnet.minepi.com/ 4 | fee = server.fetch_base_fee() 5 | network = "Pi Testnet" 6 | account = server.load_account("GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C") 7 | secret = Keypair.from_secret("SBZ33W7TBKT3LILEF44JZ6J3PJM5P2N63I423WB72PTF5TALWSYSGXZP") 8 | transaction=( 9 | TransactionBuilder( 10 | source_account = account, 11 | network_passphrase = network, 12 | base_fee = fee 13 | ) 14 | .append_manage_data_op("art","https://imgur.com/a/FwCi3PJ")#key,value ex.("ipfs","ipfs檔案hash") 15 | .build() 16 | ) 17 | transaction.sign(secret) 18 | res = server.submit_transaction(transaction) 19 | 20 | -------------------------------------------------------------------------------- /Python/NFTtutorial/lock.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server,Keypair,TransactionBuilder, Network ,Asset 2 | import requests 3 | server = Server("http://127.0.0.1:31401/")#https://api.testnet.minepi.com/ 4 | fee = server.fetch_base_fee() 5 | network = "Pi Testnet" 6 | account = server.load_account("GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C") 7 | secret = Keypair.from_secret("SBZ33W7TBKT3LILEF44JZ6J3PJM5P2N63I423WB72PTF5TALWSYSGXZP") 8 | transaction=( 9 | TransactionBuilder( 10 | source_account = account, 11 | network_passphrase = network, 12 | base_fee = fee 13 | ) 14 | .append_set_options_op( 15 | inflation_dest="GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C", 16 | master_weight = 0 17 | ) 18 | .build() 19 | ) 20 | transaction.sign(secret) 21 | res = server.submit_transaction(transaction) 22 | -------------------------------------------------------------------------------- /Python/NFTtutorial/send.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network, ManageSellOffer, Asset 2 | import requests 3 | server = Server("http://127.0.0.1:31401/") 4 | fee = server.fetch_base_fee() 5 | network = "Pi Testnet" 6 | account = server.load_account("GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C") 7 | secret = Keypair.from_secret("SBZ33W7TBKT3LILEF44JZ6J3PJM5P2N63I423WB72PTF5TALWSYSGXZP") 8 | transaction = ( 9 | TransactionBuilder( 10 | source_account = account, 11 | network_passphrase = network, 12 | base_fee = fee 13 | ) 14 | .append_payment_op("GAT55X4HMQ5W4OXH77P6GAXMJJI5TW3KBZEK45WUDKCB4CYFBJGJBO5H", 15 | "0.0000001", 16 | "TutorialNFT", 17 | "GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C") 18 | .build() 19 | ) 20 | transaction.sign(secret) 21 | res = server.submit_transaction(transaction) 22 | print(res) 23 | -------------------------------------------------------------------------------- /Python/NFTtutorial/trust.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server,Keypair,TransactionBuilder, Network ,Asset 2 | import requests 3 | server = Server("http://127.0.0.1:31401/")#https://api.testnet.minepi.com/ 4 | fee = server.fetch_base_fee() 5 | network = "Pi Testnet" 6 | user_public_key = "GAT55X4HMQ5W4OXH77P6GAXMJJI5TW3KBZEK45WUDKCB4CYFBJGJBO5H" 7 | user_account = server.load_account(account_id=user_public_key) 8 | user_secret = Keypair.from_secret("SCW66AECE7J7NQI6QLP2R3BBHVT6WJ5DW7JXGFADVHPIBF35OTB32LBO") 9 | asset_coin = Asset("TutorialNFT","GCUQCXPUX5WT3NOA5VJTLM35OCG4KVXCF3K7TYEEX377J2OD6O36OP5C") 10 | transaction=( 11 | TransactionBuilder( 12 | source_account = user_account, 13 | network_passphrase = network, 14 | base_fee = fee 15 | ) 16 | .append_change_trust_op( 17 | asset_code = asset_coin.code, 18 | asset_issuer = asset_coin.issuer, 19 | limit="0.0000001" 20 | ) 21 | .build() 22 | ) 23 | transaction.sign(user_secret) 24 | response = server.submit_transaction(transaction) 25 | -------------------------------------------------------------------------------- /Python/multisigTX: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network 2 | first_key = Keypair.from_secret("input secret keys") 3 | second_key = Keypair.from_secret("input secret keys") 4 | 5 | des_address = "GCSXRBF3YP4NVB7XP2C35O6TWYUQTARNVYR5U6S2JI7RJFWP5JXC5XTY" #destination address 6 | server = Server("https://api.testnet.minepi.com/") 7 | source_account = server.load_account(first_key.public_key) 8 | base_fee = server.fetch_base_fee() 9 | transaction = ( 10 | TransactionBuilder( 11 | source_account=source_account, 12 | network_passphrase="Pi Testnet", 13 | base_fee=base_fee, 14 | ) 15 | .add_text_memo("Play By Pionner:0205miss") 16 | .append_payment_op(des_address, "0.0000001", "XLM") #by using stellar_sdk their native asset is XLM 17 | .append_set_options_op(source="GA3UB72I7WE7I77O3UM3BXKA42HRAKXHHRLZEJ7MM73UKWURUVV2RDLA")#This need same as second_key.public_key 18 | .build() 19 | ) 20 | transaction.sign(first_key) #person1 sign it 21 | transaction.sign(second_key) #person2 sign it 22 | response = server.submit_transaction(transaction) 23 | -------------------------------------------------------------------------------- /Python/NFTtutorial/create.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network, ManageSellOffer, Asset 2 | from mnemonic import Mnemonic 3 | import requests 4 | server = Server("http://127.0.0.1:31401/") 5 | base_fee = server.fetch_base_fee() 6 | passphrase = 'PASSPHRASE from pi wallet' 7 | my_passphrase = '' 8 | my_language = 'english' 9 | mnemo = Mnemonic(my_language) 10 | if mnemo.check(friend): 11 | friend_seed = Mnemonic.to_seed(passphrase, my_passphrase) 12 | from keyfunc import account_keypair 13 | account_number = 0 14 | ff = account_keypair(friend_seed, account_number) 15 | friendt_key = Keypair.from_secret(ff.seed().decode()) 16 | print(ff.seed().decode()) #Original key 17 | issuer_public_key = friendt_key.public_key 18 | destination = Keypair.random() #This will create a keypair not in network 19 | source_account = server.load_account(account_id=friendt_key.public_key) 20 | transaction = ( 21 | TransactionBuilder( 22 | source_account=source_account, 23 | network_passphrase="Pi Testnet", 24 | base_fee=base_fee, 25 | ) 26 | .append_create_account_op( 27 | destination=destination.public_key, 28 | starting_balance="31" #Should more than 20, but if you want to create token it should be more than 30(without fee) 29 | ) 30 | .build() 31 | ) 32 | transaction.sign(friendt_key) 33 | response = server.submit_transaction(transaction) 34 | #Show keypair 35 | print( 36 | f"New Keypair: \n\t public: {destination.public_key}\n\t secret: {destination.secret}" 37 | ) 38 | -------------------------------------------------------------------------------- /Python/payment.py: -------------------------------------------------------------------------------- 1 | # pay 10.25 Pi 2 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network 3 | from mnemonic import Mnemonic 4 | from keyfunc import account_keypair 5 | my_seed_phrase = 'passphrase' #you should add your secret key here 6 | my_passphrase = '' 7 | my_language = 'english' # or other language listed in 8 | # https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md 9 | mnemo = Mnemonic(my_language) 10 | if mnemo.check(my_seed_phrase): 11 | # my_seed_phrase is a valid BIP39 phrase for my_language 12 | binary_seed = Mnemonic.to_seed(my_seed_phrase, my_passphrase) 13 | account_number = 0 # an small unsigned integer (0 for the primary account) 14 | kp = account_keypair(binary_seed, account_number) 15 | source_keypair = Keypair.from_secret(kp.seed().decode()) 16 | print(kp.seed().decode()) #it will show your original stellar key Like SXXX.... 17 | des_address = "GBFA4NMHFUGHUV2QNGKNEFDS5IC64BWU5HDSWTDFI3EWRUPRXRRRFMPY" #destination address 18 | server = Server("https://api.testnet.minepi.com/") 19 | source_account = server.load_account(source_keypair.public_key) 20 | base_fee = server.fetch_base_fee() 21 | transaction = ( 22 | TransactionBuilder( 23 | source_account=source_account, 24 | network_passphrase="Pi Testnet", 25 | base_fee=base_fee, 26 | ) 27 | .add_text_memo("Hello, PiNetwork!") 28 | .append_payment_op(des_address, "10.25", "XLM") # xlm = native base on stellar sdk setting and will be pi in pi blockchain 29 | .build() 30 | ) 31 | transaction.sign(source_keypair) 32 | response = server.submit_transaction(transaction) 33 | -------------------------------------------------------------------------------- /Python/crawler.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server 2 | server = Server(horizon_url="https://api.mainnet.minepi.com/") 3 | """ 4 | You can set to 5 | last_cursor = "15889776972406785" 6 | account = 843810 7 | lock = 685523443.91551 8 | circulate = 31376828.3255129 9 | pending_failed = 1279 10 | tx_pioneer = 302291.9877727 11 | """ 12 | last_cursor = "14442085230841856" 13 | account = 0 14 | lock = 0 15 | circulate = 0 16 | pending_failed = 0 17 | tx_pioneer = 0 18 | ct_account = ['GBQQRIQKS7XLMWTTRM2EPMTRLPUGQJDLEKCGNDIFGTBZG4GL5CHHJI25', 19 | 'GDPDSLFVGEPX6FJKGZXSTJCPTSKKAI4KBHBAQCCKQDXISW3S5SJ6MGMS', 20 | 'GABT7EMPGNCQSZM22DIYC4FNKHUVJTXITUF6Y5HNIWPU4GA7BHT4GC5G', 21 | 'GC5RNDCRO6DDM7NZDEMW3RIN5K6AHN6GMWSZ5SAH2TRJLVGQMB2I3BNJ', 22 | 'GDPDSLFVGEPX6FJKGZXSTJCPTSKKAI4KBHBAQCCKQDXISW3S5SJ6MGMS', 23 | 'GB7HLN74IIY6PENSHHBBJJXWV6IZQDELTBZNXXORDGTL75O4KC5CUXEV'] 24 | def tx_handler(tx_response): 25 | global account,lock,circulate,pending_failed,tx_pioneer,ct_account 26 | if(tx_response['type']=='payment'): 27 | if(tx_response['from'] in ct_account): 28 | pass 29 | else: 30 | tx_pioneer = round(float(tx_pioneer) + float(tx_response['amount']),7) 31 | else: 32 | if(tx_response['type']=='create_account' and tx_response['starting_balance']=="1.0000000"): 33 | account +=1 34 | if(tx_response['type']=='create_claimable_balance'): 35 | lock = round(float(lock) + float(tx_response['amount']),7) 36 | if(tx_response['type']=='claim_claimable_balance' and tx_response['source_account']!='GC5RNDCRO6DDM7NZDEMW3RIN5K6AHN6GMWSZ5SAH2TRJLVGQMB2I3BNJ'): 37 | a = server.effects().for_operation(tx_response['id']).call()["_embedded"]["records"][0]["amount"] 38 | lock = round(float(lock) - float(a),7) 39 | circulate = round(float(circulate) + float(a),7) 40 | if(tx_response['type']=='claim_claimable_balance' and tx_response['source_account']=='GC5RNDCRO6DDM7NZDEMW3RIN5K6AHN6GMWSZ5SAH2TRJLVGQMB2I3BNJ'): 41 | a = server.effects().for_operation(tx_response['id']).call()["_embedded"]["records"][0]["amount"] 42 | lock = round(float(lock) - float(a),7) 43 | pending_failed += 1 44 | print(f"op_id:{tx_response['id']}\n create account:{account}\n lock:{lock}\n circulate:{circulate}\n CT_claimback:{pending_failed}\n Pioneer Total Transfer:{tx_pioneer}") 45 | 46 | if __name__ == '__main__': 47 | for tx in server.operations().cursor(last_cursor).stream(): 48 | tx_handler(tx) 49 | -------------------------------------------------------------------------------- /Python/keyfunc.py: -------------------------------------------------------------------------------- 1 | import struct 2 | import hashlib 3 | import hmac 4 | 5 | 6 | # BIP-0044 path format for Stellar keypair derivation, as specified in 7 | # https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md 8 | ACCOUNT_PATH_FORMAT = "m/44'/314159'/0'" 9 | 10 | 11 | # the index of the first hardened key, per BIP-0032 and SLIP-0010 12 | HARDENED = 0x80000000 13 | 14 | # as defined in https://github.com/satoshilabs/slips/blob/master/slip-0010.md 15 | CURVE = b'ed25519 seed' 16 | 17 | 18 | hmac_sha_512 = lambda key, data: hmac.new(key, data, hashlib.sha512).digest() 19 | 20 | 21 | def key(v): 22 | """Return the private key part (the left half) of a 64-byte sequence v.""" 23 | return v[:32] 24 | 25 | 26 | def chain_code(v): 27 | """Return the chain code part (the right half) of a 64-byte sequence v.""" 28 | return v[32:] 29 | 30 | 31 | def ser32(i): 32 | """Serialize a 32-bit unsigned integer i as a 4-byte sequence. 33 | The most significant byte of i appears first in the serialization. 34 | """ 35 | return struct.pack('>L', i) 36 | 37 | 38 | def new_master_key(seed): 39 | """Return the extended master key derived from a 64-byte binary seed. 40 | 41 | BIP-0032 defines an extended key as a pair (private_key, chain_code). 42 | The extended master key is the pair (master_private_key, master_chain_code) 43 | specified by SLIP-0010. 44 | """ 45 | h = hmac_sha_512(CURVE, seed); 46 | return (key(h), chain_code(h)) 47 | 48 | 49 | def derive(parent_key, parent_chain_code, i): 50 | """Return the i-th extended child key from an extended parent key.""" 51 | assert len(parent_key) == 32 52 | assert len(parent_chain_code) == 32 53 | assert i >= HARDENED, 'no public derivation for ed25519' 54 | data = b'\x00' + parent_key + ser32(i) 55 | h = hmac_sha_512(parent_chain_code, data) 56 | return (key(h), chain_code(h)) 57 | 58 | 59 | def derive_along_path(path, seed): 60 | """Derive an extended key from a 64-byte binary seed and a BIP-0044 path. 61 | Returns the extended key obtained by following the given derivation path, 62 | starting at the extended master key derived from the given binary seed. 63 | """ 64 | elements = list(element.rstrip("'") for element in path.split('/'))[1:] 65 | (key, chain_code) = new_master_key(seed) 66 | for e in elements: 67 | (key, chain_code) = derive(key, chain_code, int(e) | HARDENED) 68 | return key 69 | 70 | 71 | def account_keypair(seed, account_number): 72 | """Return the account keypair for a 64-byte binary seed and account_number.""" 73 | from stellar_base.keypair import Keypair 74 | acc_seed = derive_along_path(ACCOUNT_PATH_FORMAT, seed); 75 | return Keypair.from_raw_seed(acc_seed) 76 | -------------------------------------------------------------------------------- /Python/AssetCreate.py: -------------------------------------------------------------------------------- 1 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network, ManageSellOffer, Asset 2 | from mnemonic import Mnemonic 3 | import requests 4 | server = Server("https://api.testnet.minepi.com/") 5 | base_fee = server.fetch_base_fee() 6 | issuer_phrase = 'issuer passphrase' #need to change 7 | seller_phrase = 'seller passphrase' #need to change 8 | my_passphrase = '' 9 | my_language = 'english' 10 | mnemo = Mnemonic(my_language) 11 | if mnemo.check(issuer_phrase): 12 | issuer_seed = Mnemonic.to_seed(issuer_phrase, my_passphrase) 13 | if mnemo.check(seller_phrase): 14 | seller_seed = Mnemonic.to_seed(seller_phrase,my_passphrase) 15 | from keyfunc import account_keypair 16 | account_number = 0 # an small unsigned integer (0 for the primary account) 17 | issuer = account_keypair(issuer_seed, account_number) 18 | seller = account_keypair(seller_seed, account_number) 19 | seller_secret_key = Keypair.from_secret(seller.seed().decode()) 20 | issuer_secret_key = Keypair.from_secret(issuer.seed().decode()) 21 | issuer_public_key = issuer_secret_key.public_key 22 | seller_public_key = seller_secret_key.public_key 23 | issuer_account = server.load_account(account_id=issuer_public_key) 24 | seller_account = server.load_account(account_id=seller_public_key) 25 | #manage offer 26 | network_passphrase = "Pi Testnet" 27 | ## get fee from Pi Testnet 28 | fee = base_fee 29 | print("\nCreate new Asset\n") 30 | # create asset 31 | 32 | ## Create an object to represent the new asset 33 | asset_coin = Asset("PAPC", issuer_public_key) #You can change PAPC to what you want. Mention that the letters must<=12 34 | 35 | ## The Seller Account (the account that the custom asset receivs) must trust the asset. 36 | print( 37 | "The Seller Account must trust the new asset. \ 38 | \nCreate Trust." 39 | ) 40 | trust_transaction = ( 41 | TransactionBuilder( 42 | source_account=seller_account, 43 | network_passphrase=network_passphrase, 44 | base_fee=fee, 45 | ) 46 | # The `changeTrust` operation creates (or alters) a trustline 47 | # The `limit` parameter below is optional 48 | .append_change_trust_op( 49 | asset_code=asset_coin.code, 50 | asset_issuer=asset_coin.issuer, 51 | limit="5000", #this is the limit for your token, you can create more in future if your issuer account is not in lock status 52 | ) 53 | .set_timeout(100) 54 | .build() 55 | ) 56 | 57 | trust_transaction.sign(seller_secret_key) 58 | trust_transaction_resp = server.submit_transaction(trust_transaction) 59 | print("Trust created\n") 60 | ## Send 5000 PAPC asset to the seller account. 61 | print("Send PAPC to seller account") 62 | aac_payment_transaction = ( 63 | TransactionBuilder( 64 | source_account=issuer_account, 65 | network_passphrase=network_passphrase, 66 | base_fee=fee, 67 | ) 68 | .append_payment_op( 69 | destination=seller_public_key, 70 | amount="5000", 71 | asset_code=asset_coin.code, 72 | asset_issuer=asset_coin.issuer, 73 | ) 74 | .build() 75 | ) 76 | aac_payment_transaction.sign(issuer_secret_key) 77 | aac_payment_transaction_resp = server.submit_transaction(aac_payment_transaction) 78 | print(f"Sended 5000 PAPC to {seller_public_key}") 79 | print("#" * 30) 80 | -------------------------------------------------------------------------------- /Python/operationBind.py: -------------------------------------------------------------------------------- 1 | # pay 10.25 Pi 2 | from stellar_sdk import Server, Keypair, TransactionBuilder, Network 3 | from mnemonic import Mnemonic 4 | from keyfunc import account_keypair 5 | my_seed_phrase = '' #you should add your secret key here(passphrase) 6 | my_passphrase = '' 7 | my_language = 'english' # or other language listed in 8 | # https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md 9 | mnemo = Mnemonic(my_language) 10 | if mnemo.check(my_seed_phrase): 11 | # my_seed_phrase is a valid BIP39 phrase for my_language 12 | binary_seed = Mnemonic.to_seed(my_seed_phrase, my_passphrase) 13 | account_number = 0 # an small unsigned integer (0 for the primary account) 14 | kp = account_keypair(binary_seed, account_number) 15 | source_keypair = Keypair.from_secret(kp.seed().decode()) 16 | print(kp.seed().decode()) #it will show your original stellar key Like SXXX.... 17 | des_address = "GCSXRBF3YP4NVB7XP2C35O6TWYUQTARNVYR5U6S2JI7RJFWP5JXC5XTY" #destination address 18 | server = Server("https://api.testnet.minepi.com/") #YOU CAN CHANGE TO 127.0.0.1:31401 if your node is running well 19 | for i in range(1,200): # how many time you want to submit (According to sequence in stellar you can only submit 1 tx per 1 block if you use this kind of for loop) 20 | source_account = server.load_account(source_keypair.public_key) #load account and sequence 21 | base_fee = server.fetch_base_fee() 22 | transaction = ( 23 | TransactionBuilder( 24 | source_account=source_account, 25 | network_passphrase="Pi Testnet", 26 | base_fee=base_fee, 27 | ) 28 | .add_text_memo("Play By Pionner:0205miss") #add memo to let everyone know who is playing 29 | .append_payment_op(des_address, "0.0000001", "XLM") #Because we are using stellar sdk, the native asset is XLM 30 | .append_payment_op(des_address, "0.0000001", "XLM") 31 | .append_payment_op(des_address, "0.0000001", "XLM") 32 | .append_payment_op(des_address, "0.0000001", "XLM") 33 | .append_payment_op(des_address, "0.0000001", "XLM") 34 | .append_payment_op(des_address, "0.0000001", "XLM") 35 | .append_payment_op(des_address, "0.0000001", "XLM") 36 | .append_payment_op(des_address, "0.0000001", "XLM") 37 | .append_payment_op(des_address, "0.0000001", "XLM") 38 | .append_payment_op(des_address, "0.0000001", "XLM") 39 | .append_payment_op(des_address, "0.0000001", "XLM") 40 | .append_payment_op(des_address, "0.0000001", "XLM") 41 | .append_payment_op(des_address, "0.0000001", "XLM") 42 | .append_payment_op(des_address, "0.0000001", "XLM") 43 | .append_payment_op(des_address, "0.0000001", "XLM") 44 | .append_payment_op(des_address, "0.0000001", "XLM") 45 | .append_payment_op(des_address, "0.0000001", "XLM") 46 | .append_payment_op(des_address, "0.0000001", "XLM") 47 | .append_payment_op(des_address, "0.0000001", "XLM") 48 | .append_payment_op(des_address, "0.0000001", "XLM") 49 | .append_payment_op(des_address, "0.0000001", "XLM") 50 | .append_payment_op(des_address, "0.0000001", "XLM") 51 | .append_payment_op(des_address, "0.0000001", "XLM") 52 | .append_payment_op(des_address, "0.0000001", "XLM") 53 | .append_payment_op(des_address, "0.0000001", "XLM") 54 | .append_payment_op(des_address, "0.0000001", "XLM") 55 | .append_payment_op(des_address, "0.0000001", "XLM") 56 | .append_payment_op(des_address, "0.0000001", "XLM") 57 | .append_payment_op(des_address, "0.0000001", "XLM") 58 | .append_payment_op(des_address, "0.0000001", "XLM") 59 | .append_payment_op(des_address, "0.0000001", "XLM") 60 | .append_payment_op(des_address, "0.0000001", "XLM") 61 | .append_payment_op(des_address, "0.0000001", "XLM") 62 | .append_payment_op(des_address, "0.0000001", "XLM") 63 | .append_payment_op(des_address, "0.0000001", "XLM") 64 | .append_payment_op(des_address, "0.0000001", "XLM") 65 | .append_payment_op(des_address, "0.0000001", "XLM") 66 | .append_payment_op(des_address, "0.0000001", "XLM") 67 | .append_payment_op(des_address, "0.0000001", "XLM") 68 | .append_payment_op(des_address, "0.0000001", "XLM") 69 | .append_payment_op(des_address, "0.0000001", "XLM") 70 | .append_payment_op(des_address, "0.0000001", "XLM") 71 | .append_payment_op(des_address, "0.0000001", "XLM") 72 | .append_payment_op(des_address, "0.0000001", "XLM") 73 | .append_payment_op(des_address, "0.0000001", "XLM") 74 | .append_payment_op(des_address, "0.0000001", "XLM") 75 | .append_payment_op(des_address, "0.0000001", "XLM") 76 | .append_payment_op(des_address, "0.0000001", "XLM") 77 | .append_payment_op(des_address, "0.0000001", "XLM") 78 | .append_payment_op(des_address, "0.0000001", "XLM") 79 | .append_payment_op(des_address, "0.0000001", "XLM") 80 | .append_payment_op(des_address, "0.0000001", "XLM") 81 | .append_payment_op(des_address, "0.0000001", "XLM") 82 | .append_payment_op(des_address, "0.0000001", "XLM") 83 | .append_payment_op(des_address, "0.0000001", "XLM") 84 | .append_payment_op(des_address, "0.0000001", "XLM") 85 | .append_payment_op(des_address, "0.0000001", "XLM") 86 | .append_payment_op(des_address, "0.0000001", "XLM") 87 | .append_payment_op(des_address, "0.0000001", "XLM") 88 | .append_payment_op(des_address, "0.0000001", "XLM") 89 | .append_payment_op(des_address, "0.0000001", "XLM") 90 | .append_payment_op(des_address, "0.0000001", "XLM") 91 | .append_payment_op(des_address, "0.0000001", "XLM") 92 | .append_payment_op(des_address, "0.0000001", "XLM") 93 | .append_payment_op(des_address, "0.0000001", "XLM") 94 | .append_payment_op(des_address, "0.0000001", "XLM") 95 | .append_payment_op(des_address, "0.0000001", "XLM") 96 | .append_payment_op(des_address, "0.0000001", "XLM") 97 | .append_payment_op(des_address, "0.0000001", "XLM") 98 | .append_payment_op(des_address, "0.0000001", "XLM") 99 | .append_payment_op(des_address, "0.0000001", "XLM") 100 | .append_payment_op(des_address, "0.0000001", "XLM") 101 | .append_payment_op(des_address, "0.0000001", "XLM") 102 | .append_payment_op(des_address, "0.0000001", "XLM") 103 | .append_payment_op(des_address, "0.0000001", "XLM") 104 | .append_payment_op(des_address, "0.0000001", "XLM") 105 | .append_payment_op(des_address, "0.0000001", "XLM") 106 | .append_payment_op(des_address, "0.0000001", "XLM") 107 | .append_payment_op(des_address, "0.0000001", "XLM") 108 | .append_payment_op(des_address, "0.0000001", "XLM") 109 | .append_payment_op(des_address, "0.0000001", "XLM") 110 | .append_payment_op(des_address, "0.0000001", "XLM") 111 | .append_payment_op(des_address, "0.0000001", "XLM") 112 | .append_payment_op(des_address, "0.0000001", "XLM") 113 | .append_payment_op(des_address, "0.0000001", "XLM") 114 | .append_payment_op(des_address, "0.0000001", "XLM") 115 | .append_payment_op(des_address, "0.0000001", "XLM") 116 | .append_payment_op(des_address, "0.0000001", "XLM") 117 | .append_payment_op(des_address, "0.0000001", "XLM") 118 | .append_payment_op(des_address, "0.0000001", "XLM") 119 | .append_payment_op(des_address, "0.0000001", "XLM") 120 | .append_payment_op(des_address, "0.0000001", "XLM") 121 | .append_payment_op(des_address, "0.0000001", "XLM") 122 | .append_payment_op(des_address, "0.0000001", "XLM") 123 | .append_payment_op(des_address, "0.0000001", "XLM") 124 | .append_payment_op(des_address, "0.0000001", "XLM") 125 | .append_payment_op(des_address, "0.0000001", "XLM") 126 | .append_payment_op(des_address, "0.0000001", "XLM") 127 | .append_payment_op(des_address, "0.0000001", "XLM") 128 | .append_payment_op(des_address, "0.0000001", "XLM") 129 | .build() 130 | ) 131 | transaction.sign(source_keypair) 132 | response = server.submit_transaction(transaction) 133 | print("close") 134 | --------------------------------------------------------------------------------