🔥 Selamat datang di Bocoran Rtp Slot Hari Ini — Jelajahi tren terbaru tentang casino-table-background!
Apa itu HashConsensus
HashConsensus adalah kontrak yang bertanggung jawab untuk mengelola komite anggota oracle dan memungkinkan para anggota mencapai konsensus pada hash data untuk setiap frame pelaporan.
Waktu dibagi dalam frame dengan panjang yang sama, masing-masing memiliki slot referensi dan batas waktu pemrosesan. Data laporan harus dikumpulkan dengan melihat status dunia (baik Lapisan Konsensus maupun Eksekusi Ethereum) pada saat slot referensi frame, dan harus diproses sebelum batas waktu pemrosesan frame.
Panjang frame didefinisikan dalam epoch Lapisan Konsensus Ethereum. Slot referensi untuk setiap frame diatur ke slot terakhir dari epoch sebelum epoch pertama frame. Batas waktu pemrosesan diatur ke slot terakhir dari epoch terakhir frame.
Perhatikan bahwa semua perubahan status yang mungkin ditimbulkan oleh pemrosesan laporan dijamin akan diamati saat mengumpulkan data untuk laporan frame berikutnya. Ini adalah properti penting karena laporan oracle kadang-kadang harus berisi diff daripada seluruh status, yang mungkin tidak praktis atau bahkan tidak mungkin untuk ditransmisikan dan diproses.
Pemroses Laporan ( IReportAsyncProcessor )
IReportAsyncProcessor mendefinisikan antarmuka untuk kontrak yang menerima laporan konsensus (yaitu hash) dan memprosesnya secara asinkron. HashConsensus tidak mengharapkan perilaku spesifik dari pemroses laporan, dan menjamin hal berikut:
- HashConsensus tidak akan mengirimkan laporan melalui IReportAsyncProcessorConsensusReport atau meminta untuk membuang laporan melalui IReportAsyncProcessordConsensusReport untuk slot mana pun hingga (dan termasuk) slot yang dikembalikan dari IReportAsyncProcessortProcessingRefSlot.
- HashConsensus tidak akan menerima laporan anggota (dan dengan demikian tidak akan menyertakan laporan tersebut dalam menghitung konsensus) yang memiliki argumen consensusVersion dari panggilan HashConsensusReport yang nilainya berbeda dari yang dikembalikan dari IReportAsyncProcessorsensusVersion pada saat panggilan HashConsensusReport.
Ada dua kontrak protokol inti yang mengimplementasikan antarmuka ini:
- Oracle Akuntansi
- Oracle Bus Keluar Validator
Anggota Jalur Cepat
Anggota jalur cepat adalah subset dari semua anggota yang berubah setiap frame pelaporan. Anggota ini dapat, dan diharapkan, mengirimkan laporan selama bagian pertama frame yang disebut "interval jalur cepat" dan didefinisikan melalui setFrameConfig atau setFastLaneLengthSlots. Perhitungan subset anggota jalur cepat tergantung pada frameIndex, totalMembers dan quorum. Dalam keadaan normal, semua anggota lainnya hanya diizinkan mengirimkan laporan setelah interval jalur cepat berlalu. Ini dilakukan untuk mendorong setiap oracle dari set penuh untuk berpartisipasi dalam pelaporan secara teratur, dan mengidentifikasi anggota yang tidak berfungsi.
Subset jalur cepat terdiri dari anggota kuorum; pemilihan diimplementasikan sebagai jendela geser dengan lebar kuorum di atas indeks anggota (mod total anggota). Jendela maju satu indeks setiap frame pelaporan.
Dengan mekanisme jalur cepat aktif, cukup bagi pemantauan untuk memeriksa bahwa konsensus secara konsisten tercapai selama bagian jalur cepat dari setiap frame untuk menyimpulkan bahwa semua anggota aktif dan memiliki aturan konsensus yang sama.
Catatan: Tidak ada jaminan bahwa, pada waktu tertentu, hanya anggota jalur cepat saat ini yang dapat atau dapat melaporkan selama interval jalur cepat yang saat ini dikonfigurasi dari frame saat ini. Secara khusus, asumsi ini dapat dilanggar dalam frame apa pun di mana set anggota, epoch awal, atau jumlah kuorum diubah, atau panjang interval jalur cepat ditingkatkan. Oleh karena itu, mekanisme jalur cepat tidak boleh digunakan untuk tujuan apa pun selain memantau keaktifan anggota, dan alat pemantauan harus mempertimbangkan potensi ketidakteraturan dalam frame dengan perubahan konfigurasi apa pun.
Metode Lihat
getChainConfig()
Mengembalikan parameter rantai yang tidak dapat diubah yang diperlukan untuk menghitung epoch dan slot berdasarkan stempel waktu.
function getChainConfig() external view returns (uint256 slotsPerEpoch, uint256 secondsPerSlot, uint256 genesisTime)
Mengembalikan
Nama | Tipe | Deskripsi
slotsPerEpoch | uint256 | Jumlah slot per epoch, default 32
secondsPerSlot | uint256 | Waktu yang dialokasikan untuk setiap slot, default 12
genesisTime | uint256 | Waktu genesis Lapisan Konsensus, 1606824023 di Mainnet
getFrameConfig()
Mengembalikan konfigurasi terkait waktu.
function getFrameConfig() external view returns (uint256 initialEpoch, uint256 epochsPerFrame, uint256 fastLaneLengthSlots)
Mengembalikan
Nama | Tipe | Deskripsi
initialEpoch | uint256 | Epoch dari frame dengan indeks nol
epochsPerFrame | uint256 | Panjang frame dalam epoch
fastLaneLengthSlots | uint256 | Panjang interval jalur cepat dalam slot; lihat getIsFastLaneMember
getCurrentFrame()
Mengembalikan frame pelaporan saat ini.
function getCurrentFrame() external view returns (uint256 refSlot, uint256 reportProcessingDeadlineSlot)
Mengembalikan
Nama | Tipe | Deskripsi
refSlot | uint256 | Slot referensi frame: jika data yang menjadi dasar konsensus mencakup atau bergantung pada status onchain, status ini harus diminta pada slot referensi. Jika slot berisi blok, status harus menyertakan semua perubahan dari blok tersebut.
reportProcessingDeadlineSlot | uint256 | Slot terakhir di mana laporan dapat diproses oleh kontrak pemroses laporan.
getInitialRefSlot()
Mengembalikan slot referensi paling awal yang mungkin, yaitu slot referensi dari frame pelaporan dengan indeks nol.
function getInitialRefSlot() external view returns (uint256)
getIsMember()
Mengembalikan apakah alamat yang diberikan saat ini adalah anggota konsensus.
function getIsMember(address addr) external view returns (bool)
getIsFastLaneMember()
Mengembalikan apakah alamat yang diberikan adalah anggota jalur cepat untuk frame pelaporan saat ini.
function getIsFastLaneMember(address addr) external view returns (bool)
getMembers()
Mengembalikan semua anggota saat ini, bersama dengan slot referensi terakhir yang masing-masing anggota kirimkan laporan.
function getMembers() external view returns (address[] memory addresses, uint256[] memory lastReportedRefSlots)
getFastLaneMembers()
Mengembalikan subset dari anggota komite oracle (terdiri dari item quorum ) yang berubah setiap frame.
function getFastLaneMembers() external view returns (address[] memory addresses, uint256[] memory lastReportedRefSlots)
getQuorum()
Mengembalikan jumlah kuorum.
function getQuorum() external view returns (uint256)
getReportProcessor()
Mengembalikan alamat pemroses laporan, yaitu alamat oracle.
function getReportProcessor() external view returns (address)
getConsensusState()
Mengembalikan informasi tentang frame saat ini dan status konsensus dalam frame tersebut.
function getConsensusState() external view returns (uint256 refSlot, bytes32 consensusReport, bool isReportProcessing)
Mengembalikan
Nama | Tipe | Deskripsi
refSlot | uint256 | Slot referensi dari frame pelaporan saat ini.
consensusReport | bytes32 | Laporan konsensus untuk frame saat ini, jika ada. Nol bytes sebaliknya.
isReportProcessing | bool | Jika laporan konsensus untuk frame saat ini sudah sedang diproses. Konsensus dapat diubah sebelum pemrosesan dimulai.
getReportVariants()
Mengembalikan varian laporan dan dukungannya untuk slot referensi saat ini.
function getReportVariants() external view returns (bytes32[] memory variants, uint256[] memory support)
getConsensusStateForMember()
Mengembalikan informasi yang diperluas terkait anggota komite oracle dengan alamat yang diberikan dan status konsensus saat ini. Memberikan semua informasi yang dibutuhkan oleh daemon oracle untuk memutuskan apakah perlu mengirimkan laporan.
function getConsensusStateForMember(address addr) external view returns (MemberConsensusState memory result)
Parameter
Nama | Tipe | Deskripsi
addr | address | Alamat anggota.
Mengembalikan
Mengembalikan tipe baru MemberConsensusState
struct MemberConsensusState { uint256 currentFrameRefSlot; bytes32 currentFrameConsensusReport; bool isMember; bool isFastLane; bool canReport; uint256 lastMemberReportRefSlot; bytes32 currentFrameMemberReport; }
Metode
updateInitialEpoch()
Menetapkan epoch awal baru dengan ketentuan epoch awal saat ini masih di masa depan.
Hanya dapat dipanggil oleh pengguna dengan DEFAULT_ADMIN_ROLE.
function updateInitialEpoch(uint256 initialEpoch) external
- Membatalkan dengan InitialEpochAlreadyArrived() jika epoch saat ini lebih besar atau sama dengan epoch awal dari konfigurasi frame saat ini.
- Membatalkan dengan InitialEpochRefSlotCannotBeEarlierThanProcessingSlot() jika initial frame refSlot lebih kecil dari last processing refSlot.
- Membatalkan dengan EpochsPerFrameCannotBeZero() jika epochsPerFrame dari konfigurasi frame adalah nol.
- Membatalkan dengan FastLanePeriodCannotBeLongerThanFrame() jika fastLaneLengthSlots dari konfigurasi lebih besar dari panjang frame.
setFrameConfig()
Memperbarui konfigurasi terkait waktu.
Hanya dapat dipanggil oleh pengguna dengan MANAGE_FRAME_CONFIG_ROLE.
function setFrameConfig(uint256 epochsPerFrame, uint256 fastLaneLengthSlots) external
- Membatalkan dengan EpochsPerFrameCannotBeZero() jika epochsPerFrame adalah nol.
- Membatalkan dengan FastLanePeriodCannotBeLongerThanFrame() jika fastLaneLengthSlots lebih besar dari panjang frame.
Parameter
Nama | Tipe | Deskripsi
epochsPerFrame | uint256 | Panjang frame dalam epoch.
fastLaneLengthSlots | uint256 | Panjang interval jalur cepat dalam slot; lihat getIsFastLaneMember.
setFastLaneLengthSlots()
Menetapkan durasi interval jalur cepat dari frame pelaporan.
Hanya dapat dipanggil oleh pengguna dengan MANAGE_FAST_LANE_CONFIG_ROLE.
function setFastLaneLengthSlots(uint256 fastLaneLengthSlots) external
- Membatalkan dengan FastLanePeriodCannotBeLongerThanFrame() jika fastLaneLengthSlots lebih besar dari panjang frame.
Parameter
Nama | Tipe | Deskripsi
fastLaneLengthSlots | uint256 | Panjang interval pelaporan jalur cepat dalam slot. Menyetelnya ke nol menonaktifkan subset jalur cepat, memungkinkan oracle mana pun untuk melaporkan mulai dari slot pertama suatu frame hingga batas waktu pelaporan frame.
addMember()
Menambahkan anggota baru ke konsensus.
Hanya dapat dipanggil oleh pengguna dengan peran DISABLE_CONSENSUS_ROLE jika quorum diatur sebagai UINT256_MAX.
Hanya dapat dipanggil oleh pengguna dengan peran MANAGE_MEMBERS_AND_QUORUM_ROLE jika quorum tidak diatur sebagai UINT256_MAX.
function addMember(address addr, uint256 quorum) external
- Membatalkan dengan DuplicateMember() jika alamat addr sudah menjadi anggota konsensus.
- Membatalkan dengan AddressCannotBeZero() jika alamat addr adalah nol.
- Membatalkan dengan QuorumTooSmall(uint256 minQuorum, uint256 receivedQuorum) jika quorum kurang dari atau sama dengan total anggota konsensus dibagi 2 ( quorum <= total members / 2 )
removeMember()
Menghapus anggota dari konsensus.
Hanya dapat dipanggil oleh pengguna dengan peran DISABLE_CONSENSUS_ROLE jika quorum diatur sebagai UINT256_MAX.
Hanya dapat dipanggil oleh pengguna dengan peran MANAGE_MEMBERS_AND_QUORUM_ROLE jika quorum tidak diatur sebagai UINT256_MAX.
function removeMember(address addr, uint256 quorum) external
- Membatalkan dengan NonMember() jika alamat addr tidak ada.
- Membatalkan dengan QuorumTooSmall(uint256 minQuorum, uint256 receivedQuorum) jika quorum kurang dari atau sama dengan total anggota konsensus dibagi 2 ( quorum <= total members / 2 )
setQuorum()
Memperbarui kuorum konsensus.
Hanya dapat dipanggil oleh pengguna dengan peran DISABLE_CONSENSUS_ROLE jika quorum diatur sebagai UINT256_MAX.
Hanya dapat dipanggil oleh pengguna dengan peran MANAGE_MEMBERS_AND_QUORUM_ROLE jika quorum tidak diatur sebagai UINT256_MAX.
function setQuorum(uint256 quorum) external
- Membatalkan dengan QuorumTooSmall(uint256 minQuorum, uint256 receivedQuorum) jika quorum kurang dari atau sama dengan total anggota konsensus dibagi 2 ( quorum <= total members / 2 )
disableConsensus()
Menonaktifkan kuorum konsensus, yaitu mengatur quorum sebagai UINT256_MAX (KUORUM TAK TERJANGKAU).
Hanya dapat dipanggil oleh pengguna dengan DISABLE_CONSENSUS_ROLE.
function disableConsensus() external
- Membatalkan dengan QuorumTooSmall(uint256 minQuorum, uint256 receivedQuorum) jika quorum kurang dari atau sama dengan total anggota konsensus dibagi 2 ( quorum <= total members / 2 )
setReportProcessor()
Menetapkan alamat pemroses laporan, yaitu alamat oracle.
Hanya dapat dipanggil oleh pengguna dengan MANAGE_REPORT_PROCESSOR_ROLE.
function setReportProcessor(address newProcessor) external
- Membatalkan dengan ReportProcessorCannotBeZero() jika alamat newProcessor adalah nol.
- Membatalkan dengan NewProcessorCannotBeTheSame() jika alamat newProcessor sama dengan alamat pemroses sebelumnya.
submitReport()
Digunakan oleh anggota oracle untuk mengirimkan hash data yang dihitung untuk slot referensi yang diberikan.
function submitReport(uint256 slot, bytes32 report, uint256 consensusVersion) external
Parameter
Nama | Tipe | Deskripsi
slot | uint256 | Slot referensi tempat data dihitung. Membatalkan jika tidak cocok dengan slot referensi saat ini.
report | bytes32 | Hash data yang dihitung untuk slot referensi yang diberikan.
consensusVersion | uint256 | Versi aturan konsensus oracle. Membatalkan jika tidak cocok dengan versi yang dikembalikan oleh pemroses laporan konsensus yang saat ini diatur, atau nol jika tidak ada pemroses laporan yang diatur.
Membatalkan
- Membatalkan dengan InvalidSlot() jika slot adalah nol.
- Membatalkan dengan InvalidSlot() jika slot tidak sama dengan refSlot frame saat ini.
- Membatalkan dengan NumericOverflow() jika slot lebih besar dari UINT64_MAX.
- Membatalkan dengan EmptyReport() jika report adalah hash nol ( bytes32(0) ).
- Membatalkan dengan NonMember() jika alamat pemanggil tidak ada dalam array anggota.
- Membatalkan dengan UnexpectedConsensusVersion(uint256 expected, uint256 received) jika consensusVersion tidak sama dengan versi konsensus pemroses laporan.
- Membatalkan dengan StaleReport() jika slot frame saat ini lebih besar dari slot batas waktu pemrosesan laporan frame.
- Membatalkan dengan NonFastLaneMemberCannotReportWithinFastLaneInterval() jika slot frame saat ini kurang dari atau sama dengan refSlot frame ditambah panjang fastlane DAN anggota yang mengirim laporan bukan anggota fastlane.
- Membatalkan dengan ConsensusReportAlreadyProcessing() jika anggota mengirim laporan untuk slot yang sama.
- Membatalkan dengan DuplicateReport() jika anggota sudah mengirim laporan.
Acara
FrameConfigSet()
Dipancarkan ketika konfigurasi frame baru diatur melalui setFrameConfig.
event FrameConfigSet(uint256 newInitialEpoch, uint256 newEpochsPerFrame)
FastLaneConfigSet()
Dipancarkan ketika panjang jalur cepat berubah (yaitu, panjang yang didefinisikan dalam slot).
event FastLaneConfigSet(uint256 fastLaneLengthSlots)
MemberAdded()
Dipancarkan ketika anggota baru konsensus ditambahkan.
event MemberAdded(address indexed addr, uint256 newTotalMembers, uint256 newQuorum)
MemberRemoved()
Dipancarkan ketika anggota konsensus yang ada dihapus.
event MemberRemoved(address indexed addr, uint256 newTotalMembers, uint256 newQuorum)
QuorumSet()
Dipancarkan ketika kuorum anggota konsensus diubah.
event QuorumSet(uint256 newQuorum, uint256 totalMembers, uint256 prevQuorum)
ReportReceived()
Dipancarkan ketika laporan baru diterima untuk refSlot yang disediakan oleh member yang berisi hash report.
event ReportReceived(uint256 indexed refSlot, address indexed member, bytes32 report)
ConsensusReached()
Dipancarkan ketika konsensus tercapai untuk refSlot yang disediakan yang berisi hash report.
event ConsensusReached(uint256 indexed refSlot, bytes32 report, uint256 support)
ConsensusLost()
Dipancarkan ketika konsensus yang sebelumnya ditetapkan untuk refSlot yang disediakan dibubarkan.
event ConsensusLost(uint256 indexed refSlot)
ReportProcessorSet()
Dipancarkan ketika pemroses laporan diubah dari prevProcessor menjadi processor. Kedua alamat harus mematuhi antarmuka IReportAsyncProcessor.
event ReportProcessorSet(address indexed processor, address indexed prevProcessor)
Kasino
Olahraga
cambodia-casino-city