Field Input

Referensi lengkap untuk semua data yang tersedia dalam keputusan kebijakan

Setiap keputusan kebijakan memiliki akses ke data permintaan melalui objek input. Halaman ini mendokumentasikan semua field yang tersedia yang dapat Anda gunakan dalam kebijakan Anda.

Jaringan

Field-field ini mengidentifikasi jaringan blockchain dan metode RPC yang dipanggil, memungkinkan Anda membuat kebijakan khusus chain atau membatasi operasi tertentu.

input.chain

TypeExample Values
string"ethereum", "polygon", "arbitrum", "optimism", "base"

Pengidentifikasi jaringan blockchain untuk permintaan. Gunakan field ini untuk membatasi akses ke chain tertentu, menerapkan kebijakan berbeda per jaringan, atau memblokir chain tertentu sepenuhnya.

Contoh

# Only allow transactions on Polygon and Base
allowed_chains := {"polygon", "base"}
 
deny if {
    not input.chain in allowed_chains
}
 
# Apply stricter limits on Ethereum mainnet
deny if {
    input.chain == "ethereum"
    input.usd_value > 1000
}

input.rpc_method

TypeExample Values
string"eth_sendTransaction", "eth_call", "eth_getBalance"

Nama metode JSON-RPC dari permintaan. Gunakan ini untuk mengizinkan atau memblokir operasi tertentu. Misalnya, Anda dapat mengizinkan operasi baca (eth_call, eth_getBalance) sambil membatasi operasi tulis (eth_sendTransaction).

Perhatikan bahwa beberapa metode dibatasi di tingkat platform dan tidak dapat diaktifkan melalui kebijakan.

Contoh

# Only allow read-only methods
allowed_methods := {
    "eth_call",
    "eth_getBalance",
    "eth_getTransactionCount",
    "eth_getCode",
    "eth_getLogs"
}
 
deny if {
    not input.rpc_method in allowed_methods
}
 
# Block signing methods
deny if {
    input.rpc_method in {"eth_sign", "personal_sign", "eth_signTypedData"}
}

Asal Permintaan

Field-field ini menyediakan informasi lokasi tentang asal permintaan, memungkinkan kontrol akses berbasis geografis dan kepatuhan terhadap regulasi regional.

input.source_ip

TypeExample Values
string"192.168.1.1", "2001:db8::1"

Alamat IP klien yang melakukan permintaan. Gunakan ini untuk daftar izin/blokir berbasis IP atau untuk menerapkan pembatasan laju berdasarkan sumber.

Resolusi IP

Secara default, 256 Blocks menggunakan alamat IP klien yang terhubung. Jika permintaan Anda diproxy melalui infrastruktur Anda sendiri, Anda dapat meneruskan IP klien asli melalui header X-Forwarded-For - 256 Blocks akan menggunakan alamat IP pertama dari header tersebut.

Ini berguna ketika:

  • Permintaan diproxy melalui server backend Anda
  • Anda perlu meneruskan alamat IP pengguna akhir yang sebenarnya
  • Menguji kebijakan dengan alamat IP yang berbeda dalam pengembangan

Contoh

# Block specific IP addresses
blocked_ips := {"192.168.1.100", "10.0.0.50"}
 
deny if {
    input.source_ip in blocked_ips
}
 
# Only allow requests from known infrastructure
allowed_ips := {"203.0.113.10", "203.0.113.11"}
 
deny if {
    not input.source_ip in allowed_ips
}

input.source_country

TypeExample Values
string"US", "GB", "DE", "UNKNOWN", "PRIVATE", "LOCALHOST"

Kode negara dua huruf ISO 3166-1 alpha-2 yang diturunkan dari source_ip. Gunakan ini untuk pembatasan geografis, kepatuhan regulasi, atau kebijakan khusus wilayah.

Pemetaan negara disegarkan setiap hari. Akurasi biasanya 95%+ untuk alamat IP publik.

Nilai Khusus

Untuk alamat IP non-publik, nilai berikut dikembalikan sebagai pengganti kode negara:

ValueDescription
"PRIVATE"Rentang IP pribadi (10.x.x.x, 172.16-31.x.x, 192.168.x.x)
"LOCALHOST"Alamat loopback (127.x.x.x)
"LINK_LOCAL"Alamat link-local (169.254.x.x)
"MULTICAST"Alamat multicast (224.x.x.x - 239.x.x.x)
"RESERVED"Alamat yang dicadangkan (240.x.x.x+)
"UNKNOWN"Kegagalan pencarian atau jenis alamat yang tidak didukung

Contoh

# Block sanctioned countries
blocked_countries := {"KP", "IR", "CU", "SY", "RU"}
 
deny if {
    input.source_country in blocked_countries
}
 
# Only allow requests from specific regions
allowed_countries := {"US", "CA", "GB", "DE", "FR"}
 
deny if {
    not input.source_country in allowed_countries
    input.source_country != "PRIVATE"  # Allow internal/development traffic
}

Parameter Transaksi

Field-field ini diekstrak dari parameter permintaan JSON-RPC. Semua alamat dinormalisasi menjadi huruf kecil dengan awalan 0x untuk perbandingan yang konsisten.

input.from_address

TypeExample Value
string (nullable)"0x742d35cc6634c0532925a3b844bc9e7595f..."

Alamat dompet pengirim. Ini mengidentifikasi siapa yang memulai transaksi atau permintaan tanda tangan. Gunakan field ini untuk menerapkan daftar izin/blokir untuk dompet tertentu, atau untuk menerapkan aturan kebijakan yang berbeda berdasarkan pengirim.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].from
eth_callparams[0].from
eth_signparams[0]
personal_signparams[1]
eth_signTypedDataparams[0]

Contoh

# Only allow transactions from approved wallets
allowed_senders := {
    "0x742d35cc6634c0532925a3b844bc9e7595f...",
    "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606..."
}
 
deny if {
    not input.from_address in allowed_senders
}

input.to_address

TypeExample Value
string (nullable)"0x742d35cc6634c0532925a3b844bc9e7595f..."

Alamat penerima atau target transaksi. Ini bisa berupa alamat dompet untuk transfer sederhana, atau alamat kontrak untuk interaksi kontrak. Nilainya adalah null saat men-deploy kontrak baru (transaksi pembuatan kontrak tidak memiliki penerima).

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].to
eth_callparams[0].to
eth_getBalanceparams[0]
eth_getTransactionCountparams[0]

Contoh

# Block transactions to known malicious addresses
blocked_addresses := {
    "0x000000000000000000000000000000000000dead",
    "0x1234567890abcdef..."
}
 
deny if {
    input.to_address in blocked_addresses
}

input.contract_addresses

TypeExample Value
array of strings["0x742d35cc...", "0xa0b86991..."]

Array alamat kontrak pintar yang terlibat dalam permintaan. Ini sangat berguna untuk mengontrol kontrak mana yang dapat berinteraksi dengan pengguna Anda. Array dapat berisi beberapa alamat untuk metode seperti eth_getLogs yang dapat melakukan query terhadap beberapa kontrak.

Sumber berdasarkan Metode RPC

MethodParameter LocationNotes
eth_sendTransactionparams[0].toHanya jika field data atau input ada
eth_callparams[0].toSaat memanggil kontrak
eth_getCodeparams[0]Alamat kontrak target
eth_getStorageAtparams[0]Alamat kontrak target
eth_getLogsparams[0].addressDapat berupa alamat tunggal atau array

Contoh

# Only allow interactions with approved contracts (e.g., USDT and USDC)
approved_contracts := {
    "0xdac17f958d2ee523a2206206994597c13d831ec7",
    "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
}
 
deny if {
    some addr in input.contract_addresses
    not addr in approved_contracts
}

input.value_wei

TypeExample Value
string (nullable)"0xde0b6b3a7640000" (1 ETH in hex)

Nilai token asli yang ditransfer, dinyatakan dalam wei sebagai string heksadesimal. Wei adalah unit terkecil ETH (1 ETH = 10^18 wei). Ini adalah nilai mentah on-chain - untuk kebijakan berbasis USD, gunakan input.usd_value sebagai gantinya.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].value
eth_callparams[0].value

Contoh

# Block transactions transferring more than 10 ETH (in wei)
# 10 ETH = 10 * 10^18 wei = 0x8ac7230489e80000
deny if {
    input.value_wei != null
    to_number(input.value_wei) > 10000000000000000000
}
 
# Block zero-value transactions to specific contracts
deny if {
    input.value_wei == "0x0"
    some addr in input.contract_addresses
    addr == "0x..."
}

input.gas_limit

TypeExample Value
string (nullable)"0x5208" (21000 in hex)

Jumlah maksimum unit gas yang diizinkan dikonsumsi transaksi, sebagai string heksadesimal. Transfer ETH sederhana menggunakan 21.000 gas, sementara interaksi kontrak biasanya memerlukan lebih banyak.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].gas
eth_callparams[0].gas

Contoh

# Block transactions with excessive gas limits (potential spam/abuse)
# 1,000,000 gas = 0xf4240
deny if {
    input.gas_limit != null
    to_number(input.gas_limit) > 1000000
}
 
# Don't sponsor high-gas transactions
denyGasSponsor if {
    input.gas_limit != null
    to_number(input.gas_limit) > 500000
}

input.gas_price

TypeExample Value
string (nullable)"0x3b9aca00" (1 gwei in hex)

Harga gas untuk transaksi legacy (pra-EIP-1559), dinyatakan dalam wei sebagai string heksadesimal. Field ini adalah null untuk transaksi EIP-1559 yang menggunakan max_fee_per_gas sebagai gantinya.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].gasPrice
eth_callparams[0].gasPrice

Contoh

# Block legacy transactions with extremely high gas prices
# 500 gwei = 500 * 10^9 = 0x746a528800
deny if {
    input.gas_price != null
    to_number(input.gas_price) > 500000000000
}
 
# Don't sponsor legacy transactions (prefer EIP-1559)
denyGasSponsor if {
    input.gas_price != null
    input.max_fee_per_gas == null
}

input.max_fee_per_gas

TypeExample Value
string (nullable)"0x77359400" (2 gwei in hex)

Biaya total maksimum per unit gas untuk transaksi EIP-1559, sebagai string heksadesimal. Ini adalah maksimum absolut yang bersedia dibayar pengirim (biaya dasar + biaya prioritas). Hanya ada untuk jenis transaksi EIP-1559.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].maxFeePerGas

Contoh

# Block transactions willing to pay excessive gas fees
# 1000 gwei = 1000 * 10^9 = 0xe8d4a51000
deny if {
    input.max_fee_per_gas != null
    to_number(input.max_fee_per_gas) > 1000000000000
}
 
# Only sponsor transactions with reasonable max fees
# 50 gwei = 50 * 10^9 = 0xba43b7400
denyGasSponsor if {
    input.max_fee_per_gas != null
    to_number(input.max_fee_per_gas) > 50000000000
}

input.max_priority_fee_per_gas

TypeExample Value
string (nullable)"0x3b9aca00" (1 gwei in hex)

Biaya prioritas maksimum (tip) per unit gas untuk transaksi EIP-1559, sebagai string heksadesimal. Ini adalah bagian yang diberikan kepada produsen blok sebagai insentif. Hanya ada untuk jenis transaksi EIP-1559.

Sumber berdasarkan Metode RPC

MethodParameter Location
eth_sendTransactionparams[0].maxPriorityFeePerGas

Contoh

# Block transactions with excessive priority fees (potential MEV manipulation)
# 10 gwei = 10 * 10^9 = 0x2540be400
deny if {
    input.max_priority_fee_per_gas != null
    to_number(input.max_priority_fee_per_gas) > 10000000000
}
 
# Require reasonable priority fees for sponsored transactions
# 2 gwei = 2 * 10^9 = 0x77359400
denyGasSponsor if {
    input.max_priority_fee_per_gas != null
    to_number(input.max_priority_fee_per_gas) > 2000000000
}

Data yang Diperkaya

Field-field ini dihitung oleh 256 Blocks untuk memberikan konteks tambahan di luar yang ada dalam permintaan mentah.

input.usd_value

TypeExample Value
number (nullable)1500.50

Ekuivalen USD dari nilai token asli transaksi (value_wei), dihitung menggunakan harga pasar saat ini. Ini adalah field yang paling umum untuk menerapkan batas pengeluaran dan kontrol sponsor.

Harga diambil setiap menit dari umpan harga yang andal (seperti Chainlink). Nilainya mungkin null jika transaksi tidak memiliki nilai (misalnya, panggilan kontrak murni).

Contoh

# Block transactions over $10,000
deny if {
    input.usd_value > 10000
}
 
# Don't sponsor transactions over $100
denyGasSponsor if {
    input.usd_value > 100
}
 
# Handle null values safely
deny if {
    input.usd_value != null
    input.usd_value > 50000
}

Data Mentah

Untuk kasus penggunaan lanjutan di mana field terstruktur di atas tidak menyediakan apa yang Anda butuhkan.

input.raw_params

TypeExample Value
array[{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}]

Array params JSON-RPC yang lengkap dan tidak dimodifikasi dari permintaan asli. Gunakan ini ketika Anda perlu mengakses field yang tidak diekspos melalui properti input terstruktur, seperti:

  • Data panggilan kontrak (field data) untuk deteksi tanda tangan fungsi
  • Daftar akses untuk transaksi EIP-2930
  • Field kustom atau non-standar

Contoh

# Block ERC-20 transfer function calls
# Function signature: transfer(address,uint256) = 0xa9059cbb
deny if {
    params := input.raw_params[0]
    params.data != null
    startswith(params.data, "0xa9059cbb")
}
 
# Block ERC-20 approve function (0x095ea7b3)
deny if {
    params := input.raw_params[0]
    params.data != null
    startswith(params.data, "0x095ea7b3")
}
Field Input | 256 Blocks