Example #1
0
class CreateTCD(Resource):
    path = "/dapps/<addr>/create-tcd"

    @with_args(
        Argument("minProviderStake", type=int, dest="min_provider_stake"),
        Argument("maxProviderCount", type=int, dest="max_provider_count"),
        Argument("ownerRevenuePct", type=int, dest="owner_revenue_pct"),
        Argument("queryPrice", type=int, dest="query_price"),
    )
    def post(
        self,
        addr,
        min_provider_stake,
        max_provider_count,
        owner_revenue_pct,
        query_price,
    ):
        return create_transaction(
            None,
            addr,
            "createTCD(uint256,uint256,uint256,uint256)",
            ("uint256", min_provider_stake),
            ("uint256", max_provider_count),
            ("uint256", owner_revenue_pct),
            ("uint256", query_price),
        )
Example #2
0
class CommitVote(Resource):
    path = "/voting/<addr>/<int:on_chain_id>/commitvote"

    @with_poll_contract(addr="addr")
    @with_args(
        Argument("sender", type=address),
        Argument("commitHash", type=str, dest="commit_hash"),
        Argument("totalWeight", type=int, dest="total_weight"),
    )
    def post(
        self,
        addr,
        sender,
        commit_hash,
        total_weight,
        on_chain_id,
        poll_contract,
    ):
        return create_transaction(
            sender,
            get_voting_address(poll_contract.address),
            "commitVote(address,address,uint256,bytes32,bytes32,uint256,uint256 )",
            ("address", sender),
            ("address", poll_contract.address),
            ("uint256", on_chain_id),
            ("bytes32", to_bytes(hexstr=commit_hash)),
            ("bytes32", b""),
            ("uint256", total_weight),
            ("uint256", 0),
        )
Example #3
0
class BuyToken(Resource):
    path = "/dapps/<addr>/buy"

    @with_args(
        Argument("sender", type=address),
        Argument("value", type=int),
        Argument("priceLimit", type=int, dest="price_limit"),
    )
    @with_community(addr="addr")
    @with_curve(addr="addr")
    def post(self, sender, value, price_limit, addr, comm, curve):
        # get band address first
        band_contract = (
            db.session.query(Contract)
            .filter_by(contract_type="BAND_TOKEN")
            .one_or_none()
        ) or abort(400)

        return create_transaction_raw(
            sender,
            band_contract.address,
            create_transfer_and_call(
                sender,
                curve.address,
                price_limit,
                "buy(address,uint256,uint256)",
                ("uint256", value),
            ),
        )
Example #4
0
class SellToken(Resource):
    path = "/dapps/<addr>/sell"

    @with_args(
        Argument("sender", type=address),
        Argument("value", type=int),
        Argument("priceLimit", type=int, dest="price_limit"),
    )
    @with_community(addr="addr")
    @with_curve(addr="addr")
    def post(self, sender, value, price_limit, addr, comm, curve):
        # get token address first
        token_contract = comm.token_collection[0]

        return create_transaction_raw(
            sender,
            token_contract.address,
            create_transfer_and_call(
                sender,
                curve.address,
                value,
                "sell(address,uint256,uint256)",
                ("uint256", price_limit),
            ),
        )
Example #5
0
class TokenRequest(Resource):
    path = "/dapps/<addr>/request"

    @with_args(Argument("to", type=address), Argument("value", type=int))
    @with_community(addr="addr")
    def post(self, addr, comm, to, value):
        token_contract = comm.token_collection[0]
        curve_contract = comm.curve_collection[0]

        request_tx = eth_sendTransaction(
            token_contract.address,
            create_transaction_data(
                "transferFeeless(address,address,uint256)",
                ("address", "0xDaD2AD37536FB7a44D2C3DaF75E3FdaBAe3d28Be"),
                ("address", to),
                ("uint256", value),
            ),
        )

        # get band address
        band_contract = (db.session.query(Contract).filter_by(
            contract_type="BAND_TOKEN").one_or_none()) or abort(400)

        eth_sendTransaction(
            band_contract.address,
            create_transfer_and_call(
                "0xDaD2AD37536FB7a44D2C3DaF75E3FdaBAe3d28Be",
                curve_contract.address,
                int(1.5 * get_buy_price(curve_contract.address, value)),
                "buy(address,uint256,uint256)",
                ("uint256", value),
            ),
        )
        return {"result": request_tx}
Example #6
0
class BandScheduler(Resource):
    path = "/band/scheduler"

    @with_args(
        Argument("to", type=address),
        Argument("data", type=str),
        Argument("when", type=str),
    )
    def post(self, to, data, when):
        send_scheduler(to, data, when)
        return {"status": "OK"}
Example #7
0
class TCRClaimReward(Resource):
    path = "/tcr/<addr>/claim-reward"

    @with_args(
        Argument("rewardOwner", type=address, dest="reward_owner"),
        Argument("challengeId", type=int, dest="challenge_id"),
    )
    def post(self, addr, reward_owner, challenge_id):
        return create_transaction(
            reward_owner,
            addr,
            "claimReward(address,uint256)",
            ("address", reward_owner),
            ("uint256", challenge_id),
        )
Example #8
0
class TCRExit(Resource):
    path = "/tcr/<addr>/exit"

    @with_args(
        Argument("sender", type=address),
        Argument("dataHash", type=str, dest="data_hash"),
    )
    def post(self, addr, sender, data_hash):
        return create_transaction(
            sender,
            addr,
            "exit(address,bytes32)",
            ("address", sender),
            ("bytes32", to_bytes(hexstr=data_hash)),
        )
Example #9
0
class KickSource(Resource):
    path = "/data/<addr>/kick"

    @with_args(Argument("dataSource", type=address, dest="data_source"))
    def post(self, data_source, addr):
        return create_transaction(None, addr, "kick(address)",
                                  ("address", data_source))
Example #10
0
class GetDataAsNumber(Resource):
    path = "/data/<addr>/get-number"

    @with_args(Argument("key", type=str))
    def post(self, key, addr):
        return create_transaction(None, addr, "getAsNumber(bytes32)",
                                  ("bytes32", to_bytes(text=key)))
Example #11
0
class DistributeFee(Resource):
    path = "/data/<addr>/distribute-fee"

    @with_args(Argument("tokenAmount", type=int, dest="token_amount"))
    def post(self, token_amount, addr):
        return create_transaction(None, addr, "distributeFee(uint256)",
                                  ("uint256", token_amount))
Example #12
0
class WithdrawSource(Resource):
    path = "/data/<addr>/withdraw"

    @with_args(
        Argument("sender", type=address),
        Argument("withdrawOwnership", type=int, dest="withdraw_ownership"),
        Argument("dataSource", type=address, dest="data_source"),
    )
    def post(self, sender, withdraw_ownership, data_source, addr):
        return create_transaction(
            sender,
            addr,
            "withdraw(address,uint256,address)",
            ("address", sender),
            ("uint256", withdraw_ownership),
            ("address", data_source),
        )
Example #13
0
class TCRWithdraw(Resource):
    path = "/tcr/<addr>/withdraw"

    @with_args(
        Argument("sender", type=address),
        Argument("dataHash", type=str, dest="data_hash"),
        Argument("amount", type=int),
    )
    def post(self, addr, sender, data_hash, amount):
        return create_transaction(
            sender,
            addr,
            "withdraw(address,bytes32,uint256)",
            ("address", sender),
            ("bytes32", to_bytes(hexstr=data_hash)),
            ("uint256", amount),
        )
Example #14
0
class CreateDapp(Resource):
    path = "/band/create-dapp"

    @with_args(
        Argument("name", type=str),
        Argument("symbol", type=str),
        Argument(
            "bondingCollateralEquation",
            type=list,
            location="json",
            dest="bonding_collateral_equation",
        ),
        Argument(
            "bondingLiquiditySpread", type=int, dest="bonding_liquidity_spread"
        ),
        Argument(
            "paramsExpirationTime", type=int, dest="params_expiration_time"
        ),
        Argument(
            "paramsMinParticipationPct",
            type=int,
            dest="params_min_participation_pct",
        ),
        Argument(
            "paramsSupportRequiredPct",
            type=int,
            dest="params_support_required_pct",
        ),
    )
    def post(
        self,
        name,
        symbol,
        bonding_collateral_equation,
        bonding_liquidity_spread,
        params_expiration_time,
        params_min_participation_pct,
        params_support_required_pct,
    ):
        return create_transaction(
            None,
            (
                db.session.query(Contract)
                .filter_by(contract_type="BAND_FACTORY")
                .one_or_none()
                or abort(400, message="Band factory not found")
            ).address,
            "createCommunity(string,string,uint256[],uint256,uint256,uint256,uint256)",
            ("string", name),
            ("string", symbol),
            (
                "uint256[]",
                [int(token, 0) for token in bonding_collateral_equation],
            ),
            ("uint256", bonding_liquidity_spread),
            ("uint256", params_expiration_time),
            ("uint256", params_min_participation_pct),
            ("uint256", params_support_required_pct),
        )
Example #15
0
class BandRequest(Resource):
    path = "/band/request"

    @with_args(Argument("to", type=address), Argument("value", type=int))
    def post(self, to, value):
        band_contract = (db.session.query(Contract).filter_by(
            contract_type="BAND_TOKEN").one_or_none()) or abort(400)
        return {
            "result":
            eth_sendTransaction(
                band_contract.address,
                create_transaction_data(
                    "transferFeeless(address,address,uint256)",
                    ("address", "0xDaD2AD37536FB7a44D2C3DaF75E3FdaBAe3d28Be"),
                    ("address", to),
                    ("uint256", value),
                ),
            )
        }
Example #16
0
class TokenTransfer(Resource):
    path = "/dapps/<addr>/transfer"

    @with_args(
        Argument("sender", type=address),
        Argument("to", type=address),
        Argument("value", type=int),
    )
    @with_community(addr="addr")
    def post(self, sender, to, value, addr, comm):
        token_contract = comm.token_collection[0]
        return create_transaction(
            sender,
            token_contract.address,
            "transferFeeless(address,address,uint256)",
            ("address", sender),
            ("address", to),
            ("uint256", value),
        )
Example #17
0
class CreateTCR(Resource):
    path = "/dapps/<addr>/create-tcr"

    @with_args(
        Argument("prefix", type=str),
        Argument("decayFunction",
                 type=list,
                 location="json",
                 dest="decay_function"),
        Argument("minDeposit", type=int, dest="min_deposit"),
        Argument("applyStageLength", type=int, dest="apply_stage_length"),
        Argument("dispensationPercentage",
                 type=int,
                 dest="dispensation_percentage"),
        Argument("commitTime", type=int, dest="commit_time"),
        Argument("revealTime", type=int, dest="reveal_time"),
        Argument("minParticipationPct", type=int,
                 dest="min_participation_pct"),
        Argument("supportRequiredPct", type=int, dest="support_required_pct"),
    )
    def post(
        self,
        addr,
        prefix,
        decay_function,
        min_deposit,
        apply_stage_length,
        dispensation_percentage,
        commit_time,
        reveal_time,
        min_participation_pct,
        support_required_pct,
    ):
        return create_transaction(
            None,
            addr,
            "createTCR(bytes8,uint256[],uint256,uint256,uint256,uint256,uint256,uint256,uint256)",
            ("bytes8", bytes(prefix, "utf-8")),
            ("uint256[]", [int(token, 0) for token in decay_function]),
            ("uint256", min_deposit),
            ("uint256", apply_stage_length),
            ("uint256", dispensation_percentage),
            ("uint256", commit_time),
            ("uint256", reveal_time),
            ("uint256", min_participation_pct),
            ("uint256", support_required_pct),
        )
Example #18
0
class VoteSource(Resource):
    path = "/data/<addr>/vote"

    @with_args(
        Argument("sender", type=address),
        Argument("stake", type=int),
        Argument("dataSource", type=address, dest="data_source"),
    )
    def post(self, sender, stake, data_source, addr):
        return create_transaction_raw(
            sender,
            get_community_token_address(addr),
            create_transfer_and_call(
                sender,
                addr,
                stake,
                "vote(address,uint256,address)",
                ("address", data_source),
            ),
        )
Example #19
0
class TCREntries(Resource):
    path = "/tcr/<addr>/entries"

    @with_args(
        Argument("sender", type=address),
        Argument("dataHash", type=str, dest="data_hash"),
        Argument("deposit", type=int),
    )
    def post(self, addr, sender, data_hash, deposit):
        return create_transaction_raw(
            sender,
            get_community_token_address(addr),
            create_transfer_and_call(
                sender,
                addr,
                deposit,
                "applyEntry(address,uint256,bytes32)",
                ("bytes32", to_bytes(hexstr=data_hash)),
            ),
        )
Example #20
0
class CastVote(Resource):
    path = "/voting/<addr>/<int:on_chain_id>/castvote"

    @with_poll_contract(addr="addr")
    @with_args(
        Argument("sender", type=address),
        Argument("yesVote", type=int, dest="yes_vote"),
        Argument("noVote", type=int, dest="no_vote"),
    )
    def post(self, addr, sender, yes_vote, no_vote, on_chain_id,
             poll_contract):
        return create_transaction(
            sender,
            get_voting_address(poll_contract.address),
            "castVote(address,address,uint256,uint256,uint256)",
            ("address", sender),
            ("address", poll_contract.address),
            ("uint256", on_chain_id),
            ("uint256", yes_vote),
            ("uint256", no_vote),
        )
Example #21
0
class ProposeProposal(Resource):
    path = "/parameter/<addr>/propose"

    @with_community(addr="addr")
    @with_parameter(addr="addr")
    @with_args(
        Argument("sender", type=address),
        Argument("reasonHash", type=str, dest="reason_hash"),
        Argument("keys", type=list, location="json"),
        Argument("values", type=list, location="json"),
    )
    def post(self, sender, reason_hash, addr, comm, param, keys, values):
        return create_transaction(
            sender,
            param.address,
            "propose(address,bytes32,bytes32[],uint256[])",
            ("address", sender),
            ("bytes32", to_bytes(hexstr=reason_hash)),
            ("bytes32[]", [bytes(key, "utf-8") for key in keys]),
            ("uint256[]", [int(value, 0) for value in values]),
        )
Example #22
0
class TCRChallenge(Resource):
    path = "/tcr/<addr>/challenge"

    @with_args(
        Argument("sender", type=address),
        Argument("entryHash", type=str, dest="entry_hash"),
        Argument("amount", type=int),
        Argument("reasonHash", type=str, dest="reason_hash"),
    )
    def post(self, addr, sender, entry_hash, amount, reason_hash):
        return create_transaction_raw(
            sender,
            get_community_token_address(addr),
            create_transfer_and_call(
                sender,
                addr,
                amount,
                "initiateChallenge(address,uint256,bytes32,bytes32)",
                ("bytes32", to_bytes(hexstr=entry_hash)),
                ("bytes32", to_bytes(hexstr=reason_hash)),
            ),
        )
Example #23
0
class BandTransfer(Resource):
    path = "/band/transfer"

    @with_args(
        Argument("sender", type=address),
        Argument("to", type=address),
        Argument("value", type=int),
    )
    def post(self, sender, to, value):
        band_contract = (
            db.session.query(Contract)
            .filter_by(contract_type="BAND_TOKEN")
            .one_or_none()
        ) or abort(400)
        return create_transaction(
            sender,
            band_contract.address,
            "transferFeeless(address,address,uint256)",
            ("address", sender),
            ("address", to),
            ("uint256", value),
        )
Example #24
0
class BandFeeless(Resource):
    path = "/band/feeless"

    @with_args(
        Argument("sender", type=address),
        Argument("to", type=address),
        Argument("newTimestamp", type=int, dest="new_timestamp"),
        Argument("funcInterface", type=str, dest="function_interface"),
        Argument("data", type=str),
        Argument("senderSig", type=str, dest="sender_signature"),
    )
    def post(
        self,
        sender,
        to,
        function_interface,
        new_timestamp,
        data,
        sender_signature,
    ):
        band_factory = (
            db.session.query(Contract)
            .filter_by(contract_type="BAND_FACTORY")
            .first()
        )
        return {
            "result": eth_sendTransaction(
                band_factory.address,
                create_transaction_data(
                    "sendDelegatedExecution(address,address,bytes4,uint256,bytes,bytes)",
                    ("address", sender),
                    ("address", to),
                    (
                        "bytes4",
                        bytes.fromhex(remove_0x_prefix(function_interface)),
                    ),
                    ("uint256", new_timestamp),
                    ("bytes", bytes.fromhex(remove_0x_prefix(data))),
                    (
                        "bytes",
                        bytes.fromhex(remove_0x_prefix(sender_signature)),
                    ),
                ),
            )
        }
Example #25
0
class BandExec(Resource):
    path = "/band/exec"

    @with_args(Argument("to", type=address), Argument("data", type=str))
    def post(self, to, data):
        return {"result": eth_sendTransaction(to, data)}