Esempio n. 1
0
    def get(self, addr, on_chain_id, voter, poll_contract):
        voting_snapshot = 0
        contract = (
            db.session.query(Contract)
            .filter_by(address=poll_contract.address)
            .one_or_none()
        )

        if contract.contract_type == "TCR":
            challenge = db.session.query(Challenge).filter_by(
                tcr_address=poll_contract.address, challenge_id=on_chain_id
            ).one_or_none() or abort(400, message=f"Challenge not found")
            voting_snapshot = challenge.token_snap_shot
            token_address = get_community_token_address(poll_contract.address)
        elif contract.contract_type == "PARAMETER":
            proposal = db.session.query(Proposal).filter_by(
                parameter_address=poll_contract.address, proposal_id=on_chain_id
            ).one_or_none() or abort(400, message=f"Challenge not found")
            voting_snapshot = proposal.token_snap_shot
            token_address = get_community_token_address(addr)
        else:
            abort(400)

        voting_power = Decimal(
            decode_single(
                "uint256",
                to_bytes(
                    hexstr=eth_call(
                        token_address,
                        "historicalVotingPowerAtNonce(address,uint256)",
                        to_hex(
                            create_params_data(
                                ("address", voter), ("uint256", voting_snapshot)
                            )
                        ),
                    )
                ),
            )
        )
        return {
            "result": {
                "votingPower": voting_power,
                "votingSnapShot": voting_snapshot,
            }
        }
Esempio n. 2
0
 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),
         ),
     )
Esempio n. 3
0
 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)),
         ),
     )
Esempio n. 4
0
 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)),
         ),
     )