def test_pathPayment_min(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAIAAAAAAAAAAACYloAAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAAAAAAHNPhNjAAAAQFwSz9wwBEWCv9cNnuIq+Jjq36mXBI22f6uj/FZ6LbyLljkckSLkF/AqXcaOoOgY9mZ0NrXsHbA5/chSThtgMgQ='  # TODO
     assert (result == self.do(op=PathPayment({
         'source': self.source,
         'destination': self.dest,
         'send_asset': Asset.native(),
         'dest_asset': Asset.native(),
         'send_max': self.amount,
         'dest_amount': self.amount,
         'path': [],
     })))
Beispiel #2
0
 def test_pathPayment_min(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAIAAAAAAAAAAACYloAAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAAAAAAHNPhNjAAAAQFwSz9wwBEWCv9cNnuIq+Jjq36mXBI22f6uj/FZ6LbyLljkckSLkF/AqXcaOoOgY9mZ0NrXsHbA5/chSThtgMgQ='  # TODO
     assert (result == self.do(op=PathPayment({
         'source': self.source,
         'destination': self.dest,
         'send_asset': Asset.native(),
         'dest_asset': Asset.native(),
         'send_max': self.amount,
         'dest_amount': self.amount,
         'path': [],
     })))
Beispiel #3
0
 def test_payment_min(self):
     op = Payment({
         'source': self.source,
         'destination': self.dest,
         'asset': Asset.native(),
         'amount': self.amount,
     })
     op_x = Operation.from_xdr(op.xdr())
     assert op == op_x
     assert op_x.source == self.source
     assert op_x.destination == self.dest
     assert op_x.asset == Asset.native()
     assert op_x.amount == self.amount
Beispiel #4
0
 def test_double_payment(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAyAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAAAAAAAvrwgAAAAAAAAAAAQAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAAAAAAAF9eEAAAAAAAAAAABzT4TYwAAAEAhTZr3nE2w9LBziL54UuyuEgUa4MJaXfMnZpHpu9+TYgPaDE3M6DNe6Du8ZSSC89LCGfpS1Fs38JB0U5rikmMP'
     assert (result == self.make_envelope(
         Payment({
             'destination': self.accounts[0]['address'],
             'asset': Asset.native(),
             'amount': self.amount,
         }),
         Payment({
             'destination': self.accounts[1]['address'],
             'asset': Asset.native(),
             'amount': "40",
         }),
     ))
 def test_double_payment(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAyAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAAAAAAAvrwgAAAAAAAAAAAQAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAAAAAAAF9eEAAAAAAAAAAABzT4TYwAAAEAhTZr3nE2w9LBziL54UuyuEgUa4MJaXfMnZpHpu9+TYgPaDE3M6DNe6Du8ZSSC89LCGfpS1Fs38JB0U5rikmMP'
     assert (result == self.make_envelope(
         Payment({
             'destination': self.accounts[0]['address'],
             'asset': Asset.native(),
             'amount': self.amount * 1,
         }),
         Payment({
             'destination': self.accounts[1]['address'],
             'asset': Asset.native(),
             'amount': self.amount * 2,
         }),
         ))
Beispiel #6
0
def send_xlm_vault_transaction(user, destination, amount):
    from stellar_base.transaction import Transaction
    wallet = VaultWallet.objects.get(username=user, name="xlm")
    User = Keypair.from_seed(wallet.private)
    horizon = horizon_testnet()
    asset = Asset.native()

    op = Payment({
        'destination': destination,
        'asset': asset,
        'amount': amount
    })
    msg = TextMemo('From test net !')

    sequence = horizon.account(User.address().decode('utf-8')).get('sequence')

    tx = Transaction(
        source=User.address().decode(),
        opts={
            'sequence': sequence,
            'memo': msg,
            'operations': [
                op,
            ],
        },
    )
    try:
        envelope = Te(tx=tx, opts={"network_id": "TESTNET"})
        envelope.sign(User)
        xdr = envelope.xdr()
        response = horizon.submit(xdr)
        return response['hash']
    except:
        return {"error": ""}
Beispiel #7
0
 def test_pathPayment_min(self, setup):
     if setup.type == 'testnet':
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAIAAAAAAAAAAACYloAAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAAAAAAHNPhNjAAAAQFwSz9wwBEWCv9cNnuIq+Jjq36mXBI22f6uj/FZ6LbyLljkckSLkF/AqXcaOoOgY9mZ0NrXsHbA5/chSThtgMgQ='  # TODO
     else:
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAIAAAAAAAAAAACYloAAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAAAAAAHNPhNjAAAAQI1tBUmMqDa497gw9JJVgucfaiKr2e8VNWg/Pw9jM1d9qNWHBvEHxTLtBDyFKuJEguV1KVS7vBjFznlVCnKC3AI='
     assert (result == self.do(
         setup.network,
         op=PathPayment(
             source=self.source,
             destination=self.dest,
             send_asset=Asset.native(),
             dest_asset=Asset.native(),
             send_max=self.amount,
             dest_amount=self.amount,
             path=[],
         )))
 def test_payment_min(self):
     result = b"AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABAzEdbP2ISsB9pDqmIRPt6WEK0GkVOgAEljnelNQjNpDig6A60+jMtveQjdCocL13GwVbO1B8VBXgQdlAobs0fDg=="
     assert result == self.do(
         op=Payment(
             {"source": self.source, "destination": self.dest, "asset": Asset.native(), "amount": self.amount}
         )
     )
 def test_mix_1(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAECnD5OPLjCC3vjtrsffS0fekR0rEgJZoDvJrOdp2G4LBKWLPsH4ZKVVGiOxPq2akIowWckiYXwZG45/mSLSbloN'
     assert (result == self.make_envelope(
         CreateAccount({
             'destination': self.accounts[0]['address'],
             'starting_balance': self.amount,
         }),
         Payment({
             'destination': self.accounts[1]['address'],
             'asset': Asset.native(),
             'amount': self.amount,
         }),
         PathPayment({
             'destination': self.accounts[2]['address'],
             'send_asset': Asset.native(),
             'dest_asset': Asset.native(),
             'send_max': self.amount,
             'dest_amount': self.amount,
             'path': [],
         }),
         ManageOffer({
             'selling': Asset('beer', self.accounts[0]['address']),
             'buying': Asset('beer', self.accounts[1]['address']),
             'amount': 100 * 10 ** 7,
             'price': 3.14159,
             'offer_id': 1,
         }),
         CreatePassiveOffer({
             'selling': Asset('beer', self.accounts[1]['address']),
             'buying': Asset('beer', self.accounts[2]['address']),
             'amount': 100 * 10 ** 7,
             'price': 3.14159,
         }),
         SetOptions({
         }),
         ChangeTrust({
             'asset': Asset('beer', self.accounts[0]['address']),
         }),
         AllowTrust({
             'trustor': self.accounts[0]['address'],
             'asset_code': 'beer',
             'authorize': True,
         }),
         AccountMerge({
             'destination': self.accounts[0]['address'],
         })
     ))
Beispiel #10
0
 def test_mix_1(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAECnD5OPLjCC3vjtrsffS0fekR0rEgJZoDvJrOdp2G4LBKWLPsH4ZKVVGiOxPq2akIowWckiYXwZG45/mSLSbloN'
     assert (result == self.make_envelope(
         CreateAccount({
             'destination': self.accounts[0]['address'],
             'starting_balance': self.amount,
         }),
         Payment({
             'destination': self.accounts[1]['address'],
             'asset': Asset.native(),
             'amount': self.amount,
         }),
         PathPayment({
             'destination': self.accounts[2]['address'],
             'send_asset': Asset.native(),
             'dest_asset': Asset.native(),
             'send_max': self.amount,
             'dest_amount': self.amount,
             'path': [],
         }),
         ManageOffer({
             'selling': Asset('beer', self.accounts[0]['address']),
             'buying': Asset('beer', self.accounts[1]['address']),
             'amount': "100",
             'price': 3.14159,
             'offer_id': 1,
         }),
         CreatePassiveOffer({
             'selling':
             Asset('beer', self.accounts[1]['address']),
             'buying':
             Asset('beer', self.accounts[2]['address']),
             'amount':
             "100",
             'price':
             3.14159,
         }), SetOptions({}),
         ChangeTrust({
             'asset': Asset('beer', self.accounts[0]['address']),
         }),
         AllowTrust({
             'trustor': self.accounts[0]['address'],
             'asset_code': 'beer',
             'authorize': True,
         }), AccountMerge({
             'destination': self.accounts[0]['address'],
         })))
Beispiel #11
0
 def test_payment_min(self):
     result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABAzEdbP2ISsB9pDqmIRPt6WEK0GkVOgAEljnelNQjNpDig6A60+jMtveQjdCocL13GwVbO1B8VBXgQdlAobs0fDg=='
     assert (result == self.do(op=Payment({
         'source': self.source,
         'destination': self.dest,
         'asset': Asset.native(),
         'amount': self.amount,
     })))
Beispiel #12
0
def test_minimal_defaults():
    from stellar_base.asset import Asset

    result = b"AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABAzEdbP2ISsB9pDqmIRPt6WEK0GkVOgAEljnelNQjNpDig6A60+jMtveQjdCocL13GwVbO1B8VBXgQdlAobs0fDg=="
    assert result == do_single_signer(
        operation_opts={"source": SOURCE, "destination": DESTINATION, "asset": Asset.native(), "amount": AMOUNT},
        tx_opts={"seqNum": SEQ_NUM},
    )
 def test_double_payment(self, setup):
     if setup.type == 'testnet':
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAyAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAAAAAAAvrwgAAAAAAAAAAAQAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAAAAAAAF9eEAAAAAAAAAAABzT4TYwAAAEAhTZr3nE2w9LBziL54UuyuEgUa4MJaXfMnZpHpu9+TYgPaDE3M6DNe6Du8ZSSC89LCGfpS1Fs38JB0U5rikmMP'
     else:
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAyAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAAAAAAAvrwgAAAAAAAAAAAQAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAAAAAAAF9eEAAAAAAAAAAABzT4TYwAAAEAC/EENKQWCZFsKcNMEpWi7TVstQF0JbmBj/+QwkQXW8q/isCHX+UikrhxXJpI5NDKdagnH0godVShWxK1PENAC'
     assert (result == self.make_envelope(
         setup.network,
         Payment(
             destination=self.accounts[0]['address'],
             asset=Asset.native(),
             amount=self.amount,
         ),
         Payment(
             destination=self.accounts[1]['address'],
             asset=Asset.native(),
             amount="40",
         ),
     ))
Beispiel #14
0
def test_textMemo_ascii():
    from stellar_base.asset import Asset
    from stellar_base.memo import TextMemo

    result = b"AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAEAAAAHdGVzdGluZwAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABApJRB7KqhymuVzBcsit9QUZsFfk2DwSwwp1CSI6qI1scogBoNchw32lJzJqDDXXUmoi3blG8XxNGkzdFk0BDDAA=="
    assert result == do_single_signer(
        operation_opts={"source": SOURCE, "destination": DESTINATION, "asset": Asset.native(), "amount": AMOUNT},
        tx_opts={"seqNum": SEQ_NUM, "timeBounds": [], "memo": TextMemo("testing"), "fee": FEE},
    )
Beispiel #15
0
def test_textMemo_unicode():
    from stellar_base.asset import Asset
    from stellar_base.memo import TextMemo

    result = b"AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAEAAAAMdMSTxaF0xKvFhsSjAAAAAQAAAAEAAAAA01KM3XCt1+LHD7jDTOYpe/HGKSDoQoyL1JbUOc0+E2MAAAABAAAAAK2uFogrxa/78nU4lG0kBdB8JKhKz/MHOgVEGr96kkCOAAAAAAAAAAAAmJaAAAAAAAAAAAHNPhNjAAAAQJkdyCjp7w6UzRxaaHqg9lrIfWJlEyvEga2ZNhbJ7w1NZxwkqiI7AG2oJg0dg91m83W1ZP85VPOf4iDkIAI2YAs="
    assert result == do_single_signer(
        operation_opts={"source": SOURCE, "destination": DESTINATION, "asset": Asset.native(), "amount": AMOUNT},
        tx_opts={"seqNum": SEQ_NUM, "timeBounds": [], "memo": TextMemo("tēštīņģ"), "fee": FEE},
    )
 def test_mix_1(self, setup):
     if setup.type == 'testnet':
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAECnD5OPLjCC3vjtrsffS0fekR0rEgJZoDvJrOdp2G4LBKWLPsH4ZKVVGiOxPq2akIowWckiYXwZG45/mSLSbloN'
     else:
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAEAY0YGZzC1qiKatKCWaCttK1fEs3P4DpVWw2AQCdvVBS4dkCyfxu7N7tpQPEZ4WqXzAiR0D7r5L6f848pmNsgIL'
     assert (result == self.make_envelope(
         setup.network,
         CreateAccount(
             destination=self.accounts[0]['address'],
             starting_balance=self.amount,
         ),
         Payment(
             destination=self.accounts[1]['address'],
             asset=Asset.native(),
             amount=self.amount,
         ),
         PathPayment(
             destination=self.accounts[2]['address'],
             send_asset=Asset.native(),
             dest_asset=Asset.native(),
             send_max=self.amount,
             dest_amount=self.amount,
             path=[],
         ),
         ManageOffer(
             selling=Asset('beer', self.accounts[0]['address']),
             buying=Asset('beer', self.accounts[1]['address']),
             amount="100",
             price=3.14159,
             offer_id=1,
         ),
         CreatePassiveOffer(
             selling=Asset('beer', self.accounts[1]['address']),
             buying=Asset('beer', self.accounts[2]['address']),
             amount="100",
             price=3.14159,
         ), SetOptions(),
         ChangeTrust(
             asset=Asset('beer', self.accounts[0]['address']), ),
         AllowTrust(
             trustor=self.accounts[0]['address'],
             asset_code='beer',
             authorize=True,
         ), AccountMerge(destination=self.accounts[0]['address'], )))
Beispiel #17
0
 def test_pathPayment_min(self):
     op = PathPayment({
         'source': self.source,
         'destination': self.dest,
         'send_asset': Asset.native(),
         'dest_asset': Asset.native(),
         'send_max': self.amount,
         'dest_amount': self.amount,
         'path': [],
     })
     op_x = Operation.from_xdr(op.xdr())
     assert op == op_x
     assert op_x.source == self.source
     assert op_x.destination == self.dest
     assert op_x.send_asset == Asset.native()
     assert op_x.dest_asset == Asset.native()
     assert op_x.send_max == self.amount
     assert op_x.dest_amount == self.amount
     assert op_x.path == []
Beispiel #18
0
    def get_address_lumen_balance(self, address):
        """Get lumen balance of the account identified by the provided address.

        :param: str address: the address of the account to query.

        :return: the lumen balance of the account.
        :rtype: Decimal

        :raises: ValueError: if the supplied address has a wrong format.
        """
        return self.get_address_asset_balance(address, Asset.native())
Beispiel #19
0
 def test_payment_min(self, setup):
     if setup.type == 'testnet':
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABAzEdbP2ISsB9pDqmIRPt6WEK0GkVOgAEljnelNQjNpDig6A60+jMtveQjdCocL13GwVbO1B8VBXgQdlAobs0fDg=='
     else:
         result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAAAZAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAQAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAAAAEAAAAAra4WiCvFr/vydTiUbSQF0HwkqErP8wc6BUQav3qSQI4AAAAAAAAAAACYloAAAAAAAAAAAc0+E2MAAABAlw7SoaRvm53xhs7ztskutJ3MlhBJ0ME2+uSBLiSCNV+wSolCAIIlWlMF376ciT5V9J6iWMcW1hVrZAQSI4cjDw=='
     assert (result == self.do(
         setup.network,
         op=Payment(
             source=self.source,
             destination=self.dest,
             asset=Asset.native(),
             amount=self.amount,
         )))
Beispiel #20
0
    def send_lumens(self, address, amount, memo_text=None):
        """Send lumens to the account identified by the provided address.

        :param str address: the account to send lumens to.

        :param number amount: the number of lumens to send.

        :param str memo_text: a text to put into transaction memo.

        :return: transaction hash
        :rtype: str

        :raises: :class:`~kin.SdkConfigurationError` if the SDK wallet is not configured.
        :raises: ValueError: if the provided address has a wrong format.
        :raises: ValueError: if the amount is not positive.
        """
        return self.send_asset(address, Asset.native(), amount, memo_text)
Beispiel #21
0
def transfer_receive(tmp_address, receiver_kp, asset):
    """
    Receive a transfer. This is used by a wallet on behalf of the receiving
    user to pull the new asset in. When it's done the receiving account has
    all of the asset from tmp_address, and all of the XLM reserve required to
    perform the transfer.
    Args:
        tmp_address (string): address of temporary account containing the transfer asset
        receiver_kp (Keypair): Keypair for the (optionally created) receiving account
        asset (Asset): asset to receive
    Returns:
        response: the Horizon response
    """

    account_exists = False
    receiver_address = receiver_kp.address()
    receiver_acct = Address(receiver_address)
    try:
        receiver_acct.get()
        account_exists = True
    except stellar_base.exceptions.HorizonError:
        pass

    needs_trustline = True
    if account_exists:
        for b in receiver_acct.balances:
            if balance_to_asset(b) == asset:
                needs_trustline = False
                break

    tmp_acct = Address(tmp_address)
    tmp_acct.get()

    # assumes that the temp account cointains the specified asset
    amount = [
        b['balance'] for b in tmp_acct.balances if balance_to_asset(b) == asset
    ][0]

    operations = []
    if not account_exists:
        operations.append(CreateAccount(receiver_address, "1"))
    if needs_trustline:
        operations.extend([
            # enough for trustline and one offer
            Payment(receiver_address, Asset.native(), "1"),
            ChangeTrust(asset, source=receiver_kp.address())
        ])
    else:
        operations.append(
            # enough for one offer
            Payment(receiver_address, Asset.native(), "0.5"), )

    operations.extend([
        # Send Asset
        Payment(receiver_address, asset, amount),
        # Clear signers
        SetOptions(signer_weight=0, signer_address=receiver_address),
        # Clear trustlines
        ChangeTrust(asset, "0"),
        # Merge Account
        AccountMerge(receiver_address)
    ])

    txn = Transaction(source=tmp_acct.address,
                      sequence=tmp_acct.sequence,
                      fee=100 * len(operations),
                      operations=operations)

    txe = Te(tx=txn, network_id="TESTNET")
    txe.sign(receiver_kp)
    # Potentially the issuer needs to sign this too with an allow trust --
    # depends on the asset in question!
    response = horizon.submit(txe.xdr())
    return response
Beispiel #22
0
def balance_to_asset(b):
    if b['asset_type'] == 'native':
        return Asset.native()
    return Asset(b['asset_code'], b['asset_issuer'])
Beispiel #23
0
 def test_native(self):
     assert 'XLM' == Asset.native().code
     assert None == Asset.native().issuer
def _load_operations():
    amount = "1"
    return [("create_account_min",
             CreateAccount(source=SOURCE,
                           destination=DEST,
                           starting_balance=amount)),
            ("payment_min",
             Payment(
                 source=SOURCE,
                 destination=DEST,
                 asset=Asset.native(),
                 amount=amount,
             )),
            ("payment_short_asset",
             Payment(
                 source=SOURCE,
                 destination=DEST,
                 asset=Asset('USD4', SOURCE),
                 amount=amount,
             )),
            ("payment_long_asset",
             Payment(
                 source=SOURCE,
                 destination=DEST,
                 asset=Asset('SNACKS789ABC', SOURCE),
                 amount=amount,
             )),
            ("path_payment_min",
             PathPayment(
                 source=SOURCE,
                 destination=DEST,
                 send_asset=Asset.native(),
                 dest_asset=Asset.native(),
                 send_max=amount,
                 dest_amount=amount,
                 path=[],
             )),
            ("allow_trust_short_asset",
             AllowTrust(
                 source=SOURCE,
                 trustor=DEST,
                 asset_code='beer',
                 authorize=True,
             )),
            ("allow_trust_long_asset",
             AllowTrust(
                 source=SOURCE,
                 trustor=DEST,
                 asset_code='pocketknives',
                 authorize=True,
             )),
            ("manage_offer_min",
             ManageOffer(
                 selling=Asset('beer', SOURCE),
                 buying=Asset('beer', DEST),
                 amount="100",
                 price=3.14159,
                 offer_id=1,
             )),
            ("manage_offer_dict_price",
             ManageOffer(
                 selling=Asset('beer', SOURCE),
                 buying=Asset('beer', DEST),
                 amount="100",
                 price={
                     'n': 314159,
                     'd': 100000
                 },
                 offer_id=1,
             )),
            ("create_passive_offer_min",
             CreatePassiveOffer(
                 selling=Asset('beer', SOURCE),
                 buying=Asset('beer', DEST),
                 amount="100",
                 price=3.14159,
             )), ("set_options_empty", SetOptions()),
            ("change_trust_min",
             ChangeTrust(source=SOURCE, asset=Asset('beer', DEST),
                         limit='100')),
            ("change_trust_default_limit",
             ChangeTrust(source=SOURCE, asset=Asset('beer', DEST))),
            ("account_merge_min",
             AccountMerge(
                 source=SOURCE,
                 destination=DEST,
             )), ("inflation", Inflation(source=SOURCE)),
            ("manage_data",
             ManageData(
                 source=SOURCE,
                 data_name='1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY',
                 data_value=SOURCE,
             )), ("bump_sequence", BumpSequence(bump_to=23333114514))]
def _load_operations():
    amount = "1"
    return [
        ("create_account_min",
         CreateAccount(
             source=SOURCE, destination=DEST, starting_balance=amount)),
        ("payment_min",
         Payment(
             source=SOURCE,
             destination=DEST,
             asset=Asset.native(),
             amount=amount,
         )),
        ("payment_short_asset",
         Payment(
             source=SOURCE,
             destination=DEST,
             asset=Asset('USD4', SOURCE),
             amount=amount,
         )),
        ("payment_long_asset",
         Payment(
             source=SOURCE,
             destination=DEST,
             asset=Asset('SNACKS789ABC', SOURCE),
             amount=amount,
         )),
        ("path_payment_min",
         PathPayment(
             source=SOURCE,
             destination=DEST,
             send_asset=Asset.native(),
             dest_asset=Asset.native(),
             send_max=amount,
             dest_amount=amount,
             path=[],
         )),
        ("path_payment",
         PathPayment(
             destination=DEST,
             send_asset=Asset.native(),
             dest_asset=Asset.native(),
             send_max=amount,
             dest_amount=amount,
             path=[Asset('MOE', DEST)],
         )),
        ("allow_trust_short_asset",
         AllowTrust(
             source=SOURCE,
             trustor=DEST,
             asset_code='beer',
             authorize=True,
         )),
        ("allow_trust_long_asset",
         AllowTrust(
             source=SOURCE,
             trustor=DEST,
             asset_code='pocketknives',
             authorize=True,
         )),
        ("manage_offer_min",
         ManageOffer(
             selling=Asset('beer', SOURCE),
             buying=Asset('beer', DEST),
             amount="100",
             price=3.14159,
             offer_id=1,
             source=SOURCE
         )),
        ("manage_offer_dict_price",
         ManageOffer(
             selling=Asset('beer', SOURCE),
             buying=Asset('beer', DEST),
             amount="100",
             price={
                 'n': 314159,
                 'd': 100000
             },
             offer_id=1,
         )),
        ("create_passive_offer_min",
         CreatePassiveOffer(
             selling=Asset('beer', SOURCE),
             buying=Asset('beer', DEST),
             amount="100",
             price=3.14159,
             source=SOURCE
         )),
        ("create_passive_dict_offer",
         CreatePassiveOffer(
             selling=Asset('beer', SOURCE),
             buying=Asset('beer', DEST),
             amount="100",
             price={
                 'n': 314159,
                 'd': 100000
             }
         )),
        ("set_options_empty", SetOptions()),
        ("set_options_ed25519PublicKey", SetOptions(signer_type='ed25519PublicKey', signer_address=DEST, signer_weight=1)),
        ("set_options_hashX", SetOptions(signer_type='hashX', signer_address=os.urandom(32), signer_weight=2)),
        ("set_options_preAuthTx", SetOptions(signer_type='preAuthTx', signer_address=os.urandom(32), signer_weight=3)),
        ("set_options_inflation_dest",
         SetOptions(inflation_dest=DEST, source=SOURCE)),
        ("change_trust_min",
         ChangeTrust(source=SOURCE, asset=Asset('beer', DEST), limit='100')),
        ("change_trust_default_limit",
         ChangeTrust(source=SOURCE, asset=Asset('beer', DEST))),
        ("account_merge_min", AccountMerge(
            source=SOURCE,
            destination=DEST,
        )),
        ("inflation", Inflation(source=SOURCE)),
        ("manage_data",
         ManageData(
             source=SOURCE,
             data_name='1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY',
             data_value=SOURCE,
         )),
        ("manage_data_none",
         ManageData(
             data_name='1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY',
             data_value=None,
         )),
        ("bump_sequence", BumpSequence(
            source=SOURCE,
            bump_to=23333114514
        )),
        ("bump_sequence_no_source", BumpSequence(
            bump_to=23333114514
        ))
    ]
Beispiel #26
0
def pay_for_exchange(amount, coin_name, flow_status_id, exchange_account_seed,
                     sequence, fee, memo_oreder_id):
    exchange_amount = amount.split("/")[0]
    get_amount = amount.split("/")[1]
    exchange_coin_name = coin_name.split("/")[0]
    get_coin_name = coin_name.split("/")[1]
    user = Keypair.from_seed(exchange_account_seed)
    finania_kp = Keypair.from_seed(COIN_SEED)
    user_keypair = [user, finania_kp]
    memo = u'{}转账'.format(coin_name)
    opts = list()
    if fee != "0":
        op = Payment({
            'destination':
            COIN_ISSUER,
            'asset':
            Asset.native() if exchange_coin_name == PAYDEX_CODE else Asset(
                exchange_coin_name, COINS_ISSUER),
            'amount':
            str(exchange_amount),
            'source':
            user.address()
        })
        op1 = Payment({
            'destination': COIN_ISSUER,
            'asset': Asset.native(),
            'amount': str(fee),
            'source': user.address()
        })
        op2 = Payment({
            'destination':
            user.address(),
            'asset':
            Asset.native() if get_coin_name == PAYDEX_CODE else Asset(
                get_coin_name, COINS_ISSUER),
            'amount':
            str(get_amount),
            'source':
            COIN_ISSUER
        })
        opts.append(op)
        opts.append(op1)
        opts.append(op2)
    else:
        op = Payment({
            'destination':
            COIN_ISSUER,
            'asset':
            Asset.native() if exchange_coin_name == PAYDEX_CODE else Asset(
                exchange_coin_name, COINS_ISSUER),
            'amount':
            str(exchange_amount),
            'source':
            user.address()
        })
        op2 = Payment({
            'destination':
            user.address(),
            'asset':
            Asset.native() if get_coin_name == PAYDEX_CODE else Asset(
                get_coin_name, COINS_ISSUER),
            'amount':
            str(get_amount),
            'source':
            COIN_ISSUER
        })
        opts.append(op)
        opts.append(op2)
    is_success, stellar_hash = create_envelope_submits(user_keypair, sequence,
                                                       memo, opts)
    if not is_success:
        try:
            exchange = ExchangeDetail()
            exchange.query.filter_by(orders=flow_status_id).update({
                'pay_status':
                2,
                'stellar_hash':
                stellar_hash
            })
            db.session.commit()
        except Exception as e:
            logging.error(
                str(e) + u'user:%s, coin_name:%s, amount:%s转账成功存入数据哭失败' %
                (user_keypair, coin_name, amount))
            return False, u'paydex 修改状态失败转账失败'
        # 异步 请求恒星底层
        # stellar.pay_stellar(memo_oreder_id, amount, coin_name, flow_status_id, exchange_account_seed,
        #                     flow_status_id)
        stellar.pay_stellar.delay(memo_oreder_id, amount, coin_name,
                                  flow_status_id, exchange_account_seed,
                                  flow_status_id)
        # 生产随机字符串
        rand_string = random_str()
        if rand_string is None:
            return False, u'随机字符串生成失败'

        # 验证签名
        sign_name = fun_var_kargs(flow_status_id=flow_status_id,
                                  status='2',
                                  rand_string=rand_string)
        url = PHP_URL
        params = dict(flow_status_id=flow_status_id,
                      status='2',
                      sign=sign_name,
                      rand_string=rand_string)
        print '111', params
        response = requests.post(url, data=params).json()
        print '2222', response
        if response.get('code') == 200:
            print "通知PHP成功****************************************"
        else:
            return times.time_task.delay(params, stellar_hash, is_success,
                                         user, coin_name, amount, response,
                                         flow_status_id)

    else:
        # 生产随机字符串
        rand_string = random_str()
        if rand_string is None:
            return False, u'随机字符串生成失败'

        # 验证签名
        sign_name = fun_var_kargs(flow_status_id=flow_status_id,
                                  success_no=stellar_hash,
                                  status='1',
                                  rand_string=rand_string)
        url = PHP_URL
        params = dict(flow_status_id=flow_status_id,
                      success_no=stellar_hash,
                      status='1',
                      sign=sign_name,
                      rand_string=rand_string)
        print '111', params
        response = requests.post(url, data=params).json()
        print '2222', response
        if response.get('code') == 200:
            print "请求PHP成功******************************************"
            if is_success:
                # insert_tasks(stellar_hash, flow_status_id, user, coin_name, amount)
                insert_tasks.delay(stellar_hash, flow_status_id, user,
                                   coin_name, amount)
                return "插入数据库成功**************************************"

        if response.get('code') != 200:
            return times.time_task.delay(params, stellar_hash, is_success,
                                         user, coin_name, amount, response,
                                         flow_status_id)
Beispiel #27
0
 def test_native(self):
     assert 'XLM' == Asset.native().code
     assert None == Asset.native().issuer
Beispiel #28
0
def packer(envelope=False):
	import base64
	from stellar_base.stellarxdr import StellarXDR_pack as Xdr
	x = Xdr.STELLARXDRPacker()
	x.pack_TransactionEnvelope(envelope.to_xdr_object())
	return base64.b64encode(x.get_buffer())

anna = newAccount()
bob = newAccount()
print('Anna: ', json.dumps(anna, sort_keys=True, indent=4 * ' '))
print('Bob: ', json.dumps(bob, sort_keys=True, indent=4 * ' '))

operation = Payment({
	'source': anna['address'],
	'destination': bob['address'],
	'asset': Asset.native(),
	'amount': '1000', # needs to be a string?
})
tx = Transaction(
	source=anna['address'],
	opts={
		'sequence': json.loads(requests.get(url+'/accounts/'+anna['address']).text)['sequence'],
		'timeBounds': [],
		'memo': NoneMemo(),
		'fee': 100,
		'operations': [
			operation,
		],
	},
)
envelope = Te(tx=tx, opts={"network_id": "TESTNET"})
Beispiel #29
0
        def test_mix_1(self, setup):
            if setup.type == 'testnet':
                result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAECnD5OPLjCC3vjtrsffS0fekR0rEgJZoDvJrOdp2G4LBKWLPsH4ZKVVGiOxPq2akIowWckiYXwZG45/mSLSbloN'
            else:
                result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAADhAAAAAAAAAACAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAAAC+vCAAAAAAAAAAABAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAAAAAAAAL68IAAAAAAAAAAAIAAAAAAAAAAAvrwgAAAAAAoEATyhnfBjtgSGL5Fr4oHlw/X4bIYnH44zIpor2MQbUAAAAAAAAAAAvrwgAAAAAAAAAAAAAAAAMAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFiZWVyAAAAAE2ps88xwWiGst/YEzhQ+f8IH+3WNWrTH0MERPmSL9doAAAAADuaygAABMsvAAGGoAAAAAAAAAABAAAAAAAAAAQAAAABYmVlcgAAAABNqbPPMcFohrLf2BM4UPn/CB/t1jVq0x9DBET5ki/XaAAAAAFiZWVyAAAAAKBAE8oZ3wY7YEhi+Ra+KB5cP1+GyGJx+OMyKaK9jEG1AAAAADuaygAABMsvAAGGoAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABYmVlcgAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+H//////////AAAAAAAAAAcAAAAAlMoegcSS0iHsTrJ5XNJH1ri4rO05uVmRHX6dbOj22fgAAAABYmVlcgAAAAEAAAAAAAAACAAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAAAAAABzT4TYwAAAEAY0YGZzC1qiKatKCWaCttK1fEs3P4DpVWw2AQCdvVBS4dkCyfxu7N7tpQPEZ4WqXzAiR0D7r5L6f848pmNsgIL'
            assert (result == self.make_envelope(
                setup.network,
                CreateAccount(
                    destination=self.accounts[0]['address'],
                    starting_balance=self.amount,
                ),
                Payment(
                    destination=self.accounts[1]['address'],
                    asset=Asset.native(),
                    amount=self.amount,
                ),
                PathPayment(
                    destination=self.accounts[2]['address'],
                    send_asset=Asset.native(),
                    dest_asset=Asset.native(),
                    send_max=self.amount,
                    dest_amount=self.amount,
                    path=[],
                ),
                ManageOffer(
                    selling=Asset('beer', self.accounts[0]['address']),
                    buying=Asset('beer', self.accounts[1]['address']),
                    amount="100",
                    price=3.14159,
                    offer_id=1,
                ),
                CreatePassiveOffer(
                    selling=Asset('beer', self.accounts[1]['address']),
                    buying=Asset('beer', self.accounts[2]['address']),
                    amount="100",
                    price=3.14159,
                ), SetOptions(),
                ChangeTrust(
                    asset=Asset('beer', self.accounts[0]['address']), ),
                AllowTrust(
                    trustor=self.accounts[0]['address'],
                    asset_code='beer',
                    authorize=True,
                ), AccountMerge(destination=self.accounts[0]['address'], )))

            def test_mix_2(self, setup):
                if setup.type == 'testnet':
                    result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAABkAAAAAAAAAACAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABRVVSAAAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAjhvJvwQAAAAAAAAAAAAcAAAAA01KM3XCt1+LHD7jDTOYpe/HGKSDoQoyL1JbUOc0+E2MAAAABRVVSAAAAAAEAAAAAAAAAAQAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFFVVIAAAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjACOG8m/BAAAAAAAAAAAAAc0+E2MAAABAUDuJuoUdHYxE/AmYKN4x+EvI3NpLtAgs9xYq4AJMFVmC2zDIn1J2+o5uIyqYxQW84SW31laWcrY8YkGWPqkeBA=='
                else:
                    result = b'AAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjAAABkAAAAAAAAAACAAAAAAAAAAAAAAAEAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABRVVSAAAAAADTUozdcK3X4scPuMNM5il78cYpIOhCjIvUltQ5zT4TYwAjhvJvwQAAAAAAAAAAAAcAAAAA01KM3XCt1+LHD7jDTOYpe/HGKSDoQoyL1JbUOc0+E2MAAAABRVVSAAAAAAEAAAAAAAAAAQAAAACUyh6BxJLSIexOsnlc0kfWuLis7Tm5WZEdfp1s6PbZ+AAAAAFFVVIAAAAAANNSjN1wrdfixw+4w0zmKXvxxikg6EKMi9SW1DnNPhNjACOG8m/BAAAAAAAAAAAAAc0+E2MAAABAKHsltQKqjdueu13k7PI7cLg4Tya2aOFH+1Sc9qeK4z0AXxropuRVHhyuriPu/ZXHIRVDvD5xQ0SmMFPVFtU0BA=='
                assert (result == self.make_envelope(
                    setup.network,
                    SetOptions(set_flags=1),
                    ChangeTrust(
                        asset=Asset('EUR', self.address), limit="1000000000"),
                    AllowTrust(
                        authorize=True, asset_code='EUR',
                        trustor=self.address),
                    Payment(
                        destination=self.accounts[0]['address'],
                        asset=Asset('EUR', self.address),
                        amount="1000000000")))
Beispiel #30
0
 def test_native(self):
     assert 'XLM' == Asset.native().code
     assert Asset.native().issuer is None
     assert 'native' == Asset.native().type
Beispiel #31
0
def pay_have_fee(
    collect_account_public,
    amount,
    coin_name,
    flow_status_id,
    pay_account_seed,
    sequence,
    memo_oreder_id,
    merchant_private,
    fee,
):
    fee = str(fee)
    amount = str(amount)
    opts = list()
    opt_frist = Payment(
        dict(destination=collect_account_public,
             asset=Asset.native(),
             amount=str(fee)))
    opt_sceond = Payment(
        dict(destination=collect_account_public,
             asset=Asset.native() if coin_name == PAYDEX_CODE else Asset(
                 coin_name, COINS_ISSUER),
             amount=str(amount)))
    opts.append(opt_frist)
    opts.append(opt_sceond)
    user = Keypair.from_seed(merchant_private)
    users = user.address()
    is_success, stellar_hash = create_envelope_submit(user, sequence,
                                                      memo_oreder_id, opts)
    if not is_success:
        try:
            order = OrderDetail()
            order.query.filter_by(orders=flow_status_id).update(
                {'pay_status': 2})
            db.session.commit()
        except Exception as e:
            logging.error(
                str(e) + u'user:%s, coin_name:%s, amount:%s转账成功存入数据哭失败' %
                (users, coin_name, amount))
            return False, u'paydex 修改状态失败转账失败'
        # 异步 请求恒星底层
        # stellar.pay_stellar(collect_account_public, amount, coin_name, flow_status_id, pay_account_seed,memo_oreder_id)
        stellar.pay_stellar.delay(collect_account_public, amount, coin_name,
                                  flow_status_id, pay_account_seed,
                                  memo_oreder_id)
        # 生产随机字符串
        rand_string = random_str()
        if rand_string is None:
            return False, u'随机字符串生成失败'

        # 验证签名
        sign_name = fun_var_kargs(flow_status_id=flow_status_id,
                                  status='2',
                                  rand_string=rand_string)
        url = PHP_URL
        params = dict(flow_status_id=flow_status_id,
                      status='2',
                      sign=sign_name,
                      rand_string=rand_string)
        print '111', params

        response = requests.post(url, data=params).json()
        if response.get('code') == 200:
            print "通知php成功"
        if response.get('code') != 200:
            return times.time_task.delay(params, stellar_hash, users,
                                         coin_name, amount, response,
                                         flow_status_id)
    else:
        # 生产随机字符串
        rand_string = random_str()
        if rand_string is None:
            return False, u'随机字符串生成失败'

        # 验证签名
        sign_name = fun_var_kargs(flow_status_id=flow_status_id,
                                  success_no=stellar_hash,
                                  status='1',
                                  rand_string=rand_string)
        url = PHP_URL
        params = dict(flow_status_id=flow_status_id,
                      success_no=stellar_hash,
                      status='1',
                      sign=sign_name,
                      rand_string=rand_string)
        print '111', params
        response = requests.post(url, data=params).json()
        print '2222', response
        if response.get('code') == 200:
            print "通知php成功***************************************************"
            if is_success:
                insert_tasks.delay(stellar_hash, flow_status_id, users,
                                   coin_name, amount)
                # insert_tasks(stellar_hash, flow_status_id, users, coin_name, amount)
                print "转账插入数据库成功!**********************************************"
            return True

        if response.get('code') != 200:
            return times.time_task.delay(params, stellar_hash, users,
                                         coin_name, amount, response,
                                         flow_status_id)