바이프로스트 네트워크
  • 소개
  • 바이프로스트 네트워크 구조
    • 합의
    • 크로스체인 커뮤니케이션 프로토콜 (CCCP)
    • 오라클 서비스
  • 노드 운영 매뉴얼
    • 기본 노드 요구 사항
    • 풀 노드 요구 사항
    • 검증자 계정 관리
    • 운영자 가이드
      • 엔드포인트 (Endpoint) 노드 셋업
        • 도커 셋업
        • Systemd 셋업
      • 검증자 노드 셋업
        • 도커 셋업
        • Systemd 셋업
      • 릴레이어 셋업
        • bifrost-relayer.rs
      • 체인 데이터 스냅샷
      • 문제 해결
        • 테스트넷 체인 동기화 이슈
    • 시스템 모니터링
      • Prometheus and Grafana
      • Sentry
  • 노미네이터
  • 개발자 문서
    • 이더리움 API
      • 프리컴파일 컨트랙트
      • 개발자 라이브러리
      • 개발자 환경
    • 바이프로스트 프리컴파일 컨트랙트
      • 스테이킹
      • 거버넌스
      • 릴레이 매니저
    • 팔렛 인터페이스
      • BfcStaking
      • BfcUtility
      • BfcOffences
      • RelayManager
    • 클라이언트 API
      • JSON-RPC API
        • author
        • chain
        • childstate
        • debug
        • eth
        • grandpa
        • net
        • offchain
        • payment
        • rpc
        • state
        • system
        • trace
        • txpool
        • web3
      • 익스플로러 API
      • 런타임 API
    • 크로스체인 트랜잭션 및 오라클 API
      • 가격 오라클 컨트랙트 API
      • 소켓 컨트랙트 API
    • 바이프로스트 테스트넷 BFC 토큰 수령 방법
  • 거버넌스
  • 보안
  • 토큰 & 자산
    • 유니파이드 토큰
    • 인플레이션 모델
  • Add Network
    • 포키
    • 메타마스크
  • Bridge
    • 브릿지 가이드
      • 바이프로스트 네트워크로 예치
      • 다른 네트워크로 출금
    • 용어
  • Staking
    • 스테이킹 가이드
      • BFC 스테이킹
      • BFC 언스테이크
    • 용어
      • 모든 밸리데이터
      • 스테이킹 현황
  • Language
    • Bifrost Network Guide
Powered by GitBook
On this page
  1. 개발자 문서
  2. 바이프로스트 프리컴파일 컨트랙트

거버넌스

바이프로스트 네트워크는 BFC 보유자들이 관리하는 탈중앙화 네트워크입니다. 바이프로스트 네트워크의 거버넌스 프로토콜의 핵심에서, BFC 보유자들은 자신들의 스테이킹 양에 비례하는 지분 가중 투표 시스템을 통해 커뮤니티가 제안한 레퍼렌덤 (referenda)에 투표함으로써 네트워크 변경 사항을 반영합니다.

거버넌스와 관련된 모든 작업은 다음 거버넌스 컨트랙트 (Governance contract)를 통해 수행할 수 있습니다.

Governance contract

  • address: 0x0000000000000000000000000000000000000800

  • 솔리디티 컴파일러가 이 기능을 지원하지 않으므로, 아래 인터페이스를 통해 메서드를 호출하는 것을 권장합니다.

// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >=0.8.0;

/**
 * @title Pallet Governance Interface
 *
 * The interface through which solidity contracts will interact with governance related pallets
 * Address :    0x0000000000000000000000000000000000000800
 */

interface Governance {
    struct ongoing_referendum_info_meta_data {
        uint256 end;
        bytes32 proposal_hash;
        uint256 threshold;
        uint256 delay;
        uint256 ayes;
        uint256 nays;
        uint256 turnout;
    }

    struct finished_referendum_info_meta_data {
        bool approved;
        uint256 end;
    }

    /**
     * Get The total number of public proposals
     * Selector: 56fdf547
     * @return The total number of public proposals
     */
    function public_prop_count() external view returns (uint256);

    /**
     * Get details of the deposit for a proposal.
     * Selector: a30305e9
     * @param prop_index The index of the proposal you are interested in
     * @return (total deposit, initial deposit, depositors)
     */
    function deposit_of(uint256 prop_index)
        external
        view
        returns (
            uint256,
            uint256,
            address[] memory
        );

    /**
     * Get details of the votes for a referendum.
     * Selector: 09daa4d8
     * @param ref_index The index of the referendum you are interested in
     * @return (referenda index, voters, voting powers, voting sides, convictions)
     */
    function voting_of(uint256 ref_index)
        external
        view
        returns (
            uint256,
            address[] memory,
            uint256[] memory,
            bool[] memory,
            uint256[] memory
        );

    /**
     * Get details of the votes for the given account.
     * Selector: 198a1bd9
     * @param account The account address you are interested in
     * @return A tuple including:
     * * The index of voted referendas (removable)
     * * The raw votes submitted for each referenda (conviction not applied)
     * * The voting side of each referenda (true: aye, false: nay)
     * * The conviction multiplier of each votes (0~6)
     * * The delegated amount of votes received for this account (conviction applied)
     * * The delegated raw amount of votes received for this account (conviction not applied)
     * * The block number that expires the locked balance
     * * The balance locked to the network
     */
    function account_votes(address account)
        external
        view
        returns (
            uint256[] memory,
            uint256[] memory,
            bool[] memory,
            uint256[] memory,
            uint256,
            uint256,
            uint256,
            uint256
        );

    /**
     * Get the index of the lowest unbaked referendum
     * Selector: 0388f282
     * @return The lowest referendum index representing an unbaked referendum.
     */
    function lowest_unbaked() external view returns (uint256);

    /**
     * Get the details about an ongoing referendum.
     * Selector: 8b93d11a
     *
     * @dev This, along with `finished_referendum_info`, wraps the pallet's `referendum_info`
     * function. It is necessary to split it into two here because Solidity only has c-style enums.
     * @param ref_index The index of the referendum you are interested in
     * @return A tuple including:
     * * The block when voting on this referendum will end
     * * The proposal hash
     * * The biasing mechanism 0-SuperMajorityApprove, 1-SuperMajorityAgainst, 2-SimpleMajority
     * * The delay between passing and launching
     * * The total aye vote (including conviction)
     * * The total nay vote (including conviction)
     * * The total turnout (not including conviction)
     */
    function ongoing_referendum_info(uint256 ref_index)
        external
        view
        returns (ongoing_referendum_info_meta_data memory);

    /**
     * Get the details about a finished referendum.
     * Selector: b1fd383f
     *
     * @dev This, along with `ongoing_referendum_info`, wraps the pallet's `referendum_info`
     * function. It is necessary to split it into two here because Solidity only has c-style enums.
     * @param ref_index The index of the referendum you are interested in
     * @return A tuple including whether the referendum passed, and the block at which it finished.
     */
    function finished_referendum_info(uint256 ref_index)
        external
        view
        returns (finished_referendum_info_meta_data memory);

    /**
     * Make a new proposal
     * Selector: 7824e7d1
     *
     * @param proposal_hash The hash of the proposal you are making
     * @param value The number of tokens to be locked behind this proposal.
     */
    function propose(bytes32 proposal_hash, uint256 value) external;

    /**
     * Signal agreement (endorsement) with a proposal
     * Selector: c7a76601
     *
     * @dev No amount is necessary here. Seconds are always for the same amount that the original
     * proposer locked. You may second multiple times.
     *
     * @param prop_index index of the proposal you want to second
     * @param seconds_upper_bound A number greater than or equal to the current number of seconds.
     * This is necessary for calculating the weight of the call.
     */
    function second(uint256 prop_index, uint256 seconds_upper_bound) external;

    /**
     * Vote on a referendum.
     * Selector: f56cb3b3
     *
     * @param ref_index index of the referendum you want to vote in
     * @param aye `true` is a vote to enact the proposal; `false` is a vote to keep the status quo.
     * @param vote_amount The number of tokens you are willing to lock if you get your way
     * @param conviction How strongly you want to vote. Higher conviction means longer lock time.
     * This must be an integer in the range 0 to 6
     *
     * @dev This function only supposrts `Standard` votes where you either vote aye or nay.
     * It does not support `Split` votes where you vote on both sides. If such a need
     * arises, we should add an additional function to this interface called `split_vote`.
     */
    function vote(
        uint256 ref_index,
        bool aye,
        uint256 vote_amount,
        uint256 conviction
    ) external;

    /** Remove a vote for a referendum.
     * Selector: 2042f50b
     *
     * @dev Locks get complex when votes are removed. See pallet-democracy's docs for details.
     * @param ref_index The index of the referendum you are interested in
     */
    function remove_vote(uint256 ref_index) external;

    /**
     * Delegate voting power to another account.
     * Selector: 0185921e
     *
     * @dev The balance delegated is locked for as long as it is delegated, and thereafter for the
     * time appropriate for the conviction's lock period.
     * @param target The account to whom the vote shall be delegated.
     * @param conviction The conviction with which you are delegating.
     * This must be an integer in the range 0 to 6
     * @param amount The number of tokens whose voting power shall be delegated.
     */
    function delegate(
        address target,
        uint256 conviction,
        uint256 amount
    ) external;

    /**
     * Undelegate voting power
     * Selector: cb37b8ea
     *
     * @dev Tokens may be unlocked once the lock period corresponding to the conviction with which
     * the delegation was issued has elapsed.
     */
    function undelegate() external;

    /**
     * Unlock tokens that have an expired lock.
     * Selector: 2f6c493c
     *
     * @param target The account whose tokens should be unlocked. This may be any account.
     */
    function unlock(address target) external;

    /**
     * Register the preimage for an upcoming proposal. This doesn't require the proposal to be
     * in the dispatch queue but does require a deposit, returned once enacted.
     * Selector: 200881f5
     *
     * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.
     */
    function note_preimage(bytes memory encoded_proposal) external;

    /**
     * Register the preimage for an upcoming proposal. This requires the proposal to be
     * in the dispatch queue. No deposit is needed. When this call is successful, i.e.
     * the preimage has not been uploaded before and matches some imminent proposal,
     * no fee is paid.
     * Selector: cf205f96
     *
     * @param encoded_proposal The scale-encoded proposal whose hash has been submitted on-chain.
     */
    function note_imminent_preimage(bytes memory encoded_proposal) external;
}
Previous스테이킹Next릴레이 매니저

Last updated 8 days ago