mirror of
https://github.com/planetmint/planetmint.git
synced 2025-11-24 22:45:44 +00:00
* adjusted hashlib imports and renamed to bigchaindb error Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added type hints to transactions module Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved upsert_validator txs to transactions, updated imports Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed unused imports Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved tx validate to lib Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved from_db to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed from db from transaction Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved election validation to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved election methods to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved get_validators and get_recipients to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed unnecessary election method Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved show_election_status to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved topology check to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved election_id_to_public_key to validator_utils Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved vote methods to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved process_block to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed unused code from Vote Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved has election concluded to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted has_election_concluded Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed unused imports, added copyright notices Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved rollback_eleciton to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved on_rollback behaviour to planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * moved some validator utils to tendermint utils, election approval now handled by planetmint Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Use planetmint-transaction pypi package Signed-off-by: cybnon <stefan.weber93@googlemail.com> * fixed docs imports Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed validate call on test case Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * resolved linting errors Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed mock on test case Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted CHANGELOG Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed duplicate transactions test suite Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed pr comments Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * reordered imports to be standardized Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed unused imports and reordered them Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed linter error Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> Signed-off-by: cybnon <stefan.weber93@googlemail.com> Co-authored-by: cybnon <stefan.weber93@googlemail.com>
241 lines
5.6 KiB
Python
241 lines
5.6 KiB
Python
# Copyright © 2020 Interplanetary Database Association e.V.,
|
|
# Planetmint and IPDB software contributors.
|
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
|
|
|
""" Script to build http examples for http server api docs """
|
|
|
|
import json
|
|
import os
|
|
import os.path
|
|
|
|
from transactions.common.input import Input
|
|
from transactions.common.transaction_link import TransactionLink
|
|
from planetmint import lib
|
|
from transactions.types.assets.create import Create
|
|
from transactions.types.assets.transfer import Transfer
|
|
from planetmint.web import server
|
|
from ipld import multihash, marshal
|
|
|
|
|
|
TPLS = {}
|
|
|
|
|
|
TPLS[
|
|
"index-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
%(index)s
|
|
"""
|
|
|
|
TPLS[
|
|
"api-index-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
%(api_index)s
|
|
"""
|
|
|
|
TPLS[
|
|
"get-tx-id-request"
|
|
] = """\
|
|
GET /api/v1/transactions/%(txid)s HTTP/1.1
|
|
Host: example.com
|
|
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-tx-id-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
%(tx)s
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-tx-by-asset-request"
|
|
] = """\
|
|
GET /api/v1/transactions?operation=TRANSFER&asset_id=%(txid)s HTTP/1.1
|
|
Host: example.com
|
|
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-tx-by-asset-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
[%(tx_transfer)s,
|
|
%(tx_transfer_last)s]
|
|
"""
|
|
|
|
TPLS[
|
|
"post-tx-request"
|
|
] = """\
|
|
POST /api/v1/transactions?mode=async HTTP/1.1
|
|
Host: example.com
|
|
Content-Type: application/json
|
|
|
|
%(tx)s
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"post-tx-response"
|
|
] = """\
|
|
HTTP/1.1 202 Accepted
|
|
Content-Type: application/json
|
|
|
|
%(tx)s
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-block-request"
|
|
] = """\
|
|
GET /api/v1/blocks/%(blockid)s HTTP/1.1
|
|
Host: example.com
|
|
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-block-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
%(block)s
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-block-txid-request"
|
|
] = """\
|
|
GET /api/v1/blocks?transaction_id=%(txid)s HTTP/1.1
|
|
Host: example.com
|
|
|
|
"""
|
|
|
|
|
|
TPLS[
|
|
"get-block-txid-response"
|
|
] = """\
|
|
HTTP/1.1 200 OK
|
|
Content-Type: application/json
|
|
|
|
%(block_list)s
|
|
"""
|
|
|
|
|
|
def main():
|
|
"""Main function"""
|
|
|
|
ctx = {}
|
|
|
|
def pretty_json(data):
|
|
return json.dumps(data, indent=2, sort_keys=True)
|
|
|
|
client = server.create_app().test_client()
|
|
|
|
host = "example.com:9984"
|
|
|
|
# HTTP Index
|
|
res = client.get("/", environ_overrides={"HTTP_HOST": host})
|
|
res_data = json.loads(res.data.decode())
|
|
ctx["index"] = pretty_json(res_data)
|
|
|
|
# API index
|
|
res = client.get("/api/v1/", environ_overrides={"HTTP_HOST": host})
|
|
ctx["api_index"] = pretty_json(json.loads(res.data.decode()))
|
|
|
|
# tx create
|
|
from ipld import marshal, multihash
|
|
|
|
privkey = "CfdqtD7sS7FgkMoGPXw55MVGGFwQLAoHYTcBhZDtF99Z"
|
|
pubkey = "4K9sWUMFwTgaDGPfdynrbxWqWS6sWmKbZoTjxLtVUibD"
|
|
asset = {"data": multihash(marshal({"msg": "Hello Planetmint!"}))}
|
|
tx = Create.generate([pubkey], [([pubkey], 1)], asset=asset, metadata=multihash(marshal({"sequence": 0})))
|
|
tx = tx.sign([privkey])
|
|
ctx["tx"] = pretty_json(tx.to_dict())
|
|
ctx["public_keys"] = tx.outputs[0].public_keys[0]
|
|
ctx["txid"] = tx.id
|
|
|
|
# tx transfer
|
|
privkey_transfer = "3AeWpPdhEZzWLYfkfYHBfMFC2r1f8HEaGS9NtbbKssya"
|
|
pubkey_transfer = "3yfQPHeWAa1MxTX9Zf9176QqcpcnWcanVZZbaHb8B3h9"
|
|
|
|
cid = 0
|
|
input_ = Input(
|
|
fulfillment=tx.outputs[cid].fulfillment,
|
|
fulfills=TransactionLink(txid=tx.id, output=cid),
|
|
owners_before=tx.outputs[cid].public_keys,
|
|
)
|
|
tx_transfer = Transfer.generate(
|
|
[input_], [([pubkey_transfer], 1)], asset_id=tx.id, metadata=multihash(marshal({"sequence": 1}))
|
|
)
|
|
tx_transfer = tx_transfer.sign([privkey])
|
|
ctx["tx_transfer"] = pretty_json(tx_transfer.to_dict())
|
|
ctx["public_keys_transfer"] = tx_transfer.outputs[0].public_keys[0]
|
|
ctx["tx_transfer_id"] = tx_transfer.id
|
|
|
|
# privkey_transfer_last = 'sG3jWDtdTXUidBJK53ucSTrosktG616U3tQHBk81eQe'
|
|
pubkey_transfer_last = "3Af3fhhjU6d9WecEM9Uw5hfom9kNEwE7YuDWdqAUssqm"
|
|
|
|
cid = 0
|
|
input_ = Input(
|
|
fulfillment=tx_transfer.outputs[cid].fulfillment,
|
|
fulfills=TransactionLink(txid=tx_transfer.id, output=cid),
|
|
owners_before=tx_transfer.outputs[cid].public_keys,
|
|
)
|
|
tx_transfer_last = Transfer.generate(
|
|
[input_], [([pubkey_transfer_last], 1)], asset_id=tx.id, metadata=multihash(marshal({"sequence": 2}))
|
|
)
|
|
tx_transfer_last = tx_transfer_last.sign([privkey_transfer])
|
|
ctx["tx_transfer_last"] = pretty_json(tx_transfer_last.to_dict())
|
|
ctx["tx_transfer_last_id"] = tx_transfer_last.id
|
|
ctx["public_keys_transfer_last"] = tx_transfer_last.outputs[0].public_keys[0]
|
|
|
|
# block
|
|
node_private = "5G2kE1zJAgTajkVSbPAQWo4c2izvtwqaNHYsaNpbbvxX"
|
|
node_public = "DngBurxfeNVKZWCEcDnLj1eMPAS7focUZTE5FndFGuHT"
|
|
signature = "53wxrEQDYk1dXzmvNSytbCfmNVnPqPkDQaTnAe8Jf43s6ssejPxezkCvUnGTnduNUmaLjhaan1iRLi3peu6s5DzA"
|
|
|
|
app_hash = "f6e0c49c6d94d6924351f25bb334cf2a99af4206339bf784e741d1a5ab599056"
|
|
block = lib.Block(height=1, transactions=[tx.to_dict()], app_hash=app_hash)
|
|
block_dict = block._asdict()
|
|
block_dict.pop("app_hash")
|
|
ctx["block"] = pretty_json(block_dict)
|
|
ctx["blockid"] = block.height
|
|
|
|
# block status
|
|
block_list = [block.height]
|
|
ctx["block_list"] = pretty_json(block_list)
|
|
|
|
base_path = os.path.join(os.path.dirname(__file__), "source/connecting/http-samples")
|
|
if not os.path.exists(base_path):
|
|
os.makedirs(base_path)
|
|
|
|
for name, tpl in TPLS.items():
|
|
path = os.path.join(base_path, name + ".http")
|
|
code = tpl % ctx
|
|
with open(path, "w") as handle:
|
|
handle.write(code)
|
|
|
|
|
|
def setup(*_):
|
|
"""Fool sphinx into think it's an extension muahaha"""
|
|
main()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|