slot-vrng

安装量: 52
排名: #14206

安装

npx skills add https://github.com/cartridge-gg/docs --skill slot-vrng

Slot vRNG Cartridge's Verifiable Random Number Generator provides cheap, atomic, verifiable randomness for onchain games. Randomness is generated and verified within a single transaction. Contract Addresses Network Address Mainnet 0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f Sepolia 0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f Cairo Interface

[starknet::interface]

trait IVrfProvider < TContractState

{ fn request_random ( self : @ TContractState , caller : ContractAddress , source : Source ) ; fn consume_random ( ref self : TContractState , source : Source ) -> felt252 ; }

[derive(Drop, Copy, Clone, Serde)]

pub
enum
Source
{
Nonce
:
ContractAddress
,
Salt
:
felt252
,
}
Source Types
Source::Nonce(ContractAddress)
Uses the address's internal nonce.
Each request generates a different seed.
Source::Salt(felt252)
Uses a provided salt. Same salt = same random value. Usage in Contracts const VRF_PROVIDER_ADDRESS : starknet :: ContractAddress = starknet :: contract_address_const :: < 0x051fea4450da9d6aee758bdeba88b2f665bcbf549d2c61421aa724e9ac0ced8f

( ) ; fn roll_dice ( ref self : ContractState ) { let vrf_provider = IVrfProviderDispatcher { contract_address : VRF_PROVIDER_ADDRESS } ; let player_id = get_caller_address ( ) ; let random_value = vrf_provider . consume_random ( Source :: Nonce ( player_id ) ) ; // Use random_value in game logic } Executing vRNG Transactions request_random must be the first call in the multicall. The Cartridge Paymaster wraps the multicall with submit_random and assert_consumed . const call = await account . execute ( [ // First: request_random { contractAddress : VRF_PROVIDER_ADDRESS , entrypoint : 'request_random' , calldata : CallData . compile ( { caller : GAME_CONTRACT , // Source::Nonce(address) source : { type : 0 , address : account . address } , // Or Source::Salt(felt252) // source: { type: 1, salt: 0x123 }, } ) , } , // Then: your game call { contractAddress : GAME_CONTRACT , entrypoint : 'roll_dice' , // ... } , ] ) ; The source in request_random must match the source in consume_random . Controller Policy Add the vRNG contract to your Controller policies: const policies : Policy [ ] = [ // ... your existing policies ... { target : VRF_PROVIDER_ADDRESS , method : "request_random" , description : "Allows requesting random numbers from the VRF provider" , } , ] ; Security Phase 0 assumes the Provider has not revealed the private key and does not collude with players. Future plans include moving the Provider to a Trusted Execution Environment (TEE).

返回排行榜