Trường Đầu Vào
Tài liệu tham khảo đầy đủ về tất cả dữ liệu có sẵn trong quyết định chính sách
Mọi quyết định chính sách đều có quyền truy cập vào dữ liệu yêu cầu thông qua đối tượng input. Trang này ghi lại tất cả các trường có sẵn mà bạn có thể sử dụng trong chính sách của mình.
Mạng
Các trường này xác định mạng blockchain và phương thức RPC đang được gọi, cho phép bạn tạo chính sách cụ thể cho chuỗi hoặc hạn chế một số hoạt động nhất định.
input.chain
| Type | Example Values |
|---|---|
| string | "ethereum", "polygon", "arbitrum", "optimism", "base" |
Mã định danh mạng blockchain cho yêu cầu. Sử dụng trường này để hạn chế quyền truy cập vào các chuỗi cụ thể, áp dụng các chính sách khác nhau cho mỗi mạng hoặc chặn hoàn toàn một số chuỗi nhất định.
Ví dụ
# 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
| Type | Example Values |
|---|---|
| string | "eth_sendTransaction", "eth_call", "eth_getBalance" |
Tên phương thức JSON-RPC từ yêu cầu. Sử dụng điều này để cho phép hoặc chặn các hoạt động cụ thể. Ví dụ, bạn có thể cho phép các hoạt động đọc (eth_call, eth_getBalance) trong khi hạn chế các hoạt động ghi (eth_sendTransaction).
Lưu ý rằng một số phương thức bị hạn chế ở cấp độ nền tảng và không thể được bật thông qua chính sách.
Ví dụ
# 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"}
}Nguồn Gốc Yêu Cầu
Các trường này cung cấp thông tin vị trí về nguồn gốc yêu cầu, cho phép kiểm soát truy cập dựa trên địa lý và tuân thủ các quy định khu vực.
input.source_ip
| Type | Example Values |
|---|---|
| string | "192.168.1.1", "2001:db8::1" |
Địa chỉ IP của máy khách đang thực hiện yêu cầu. Sử dụng điều này cho danh sách cho phép/chặn dựa trên IP hoặc để triển khai giới hạn tốc độ dựa trên nguồn.
Phân Giải IP
Theo mặc định, 256 Blocks sử dụng địa chỉ IP của máy khách đang kết nối. Nếu các yêu cầu của bạn được proxy qua cơ sở hạ tầng của riêng bạn, bạn có thể truyền IP máy khách gốc qua tiêu đề X-Forwarded-For - 256 Blocks sẽ sử dụng địa chỉ IP đầu tiên từ tiêu đề đó.
Điều này hữu ích khi:
- Các yêu cầu được proxy qua các máy chủ backend của bạn
- Bạn cần truyền địa chỉ IP thực của người dùng cuối
- Kiểm tra chính sách với các địa chỉ IP khác nhau trong quá trình phát triển
Ví dụ
# 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
| Type | Example Values |
|---|---|
| string | "US", "GB", "DE", "UNKNOWN", "PRIVATE", "LOCALHOST" |
Mã quốc gia hai chữ cái ISO 3166-1 alpha-2 được lấy từ source_ip. Sử dụng điều này cho các hạn chế địa lý, tuân thủ quy định hoặc chính sách cụ thể theo khu vực.
Ánh xạ quốc gia được làm mới hàng ngày. Độ chính xác thường là 95%+ đối với các địa chỉ IP công cộng.
Giá Trị Đặc Biệt
Đối với các địa chỉ IP không công khai, các giá trị sau được trả về thay vì mã quốc gia:
| Value | Description |
|---|---|
"PRIVATE" | Dải IP riêng (10.x.x.x, 172.16-31.x.x, 192.168.x.x) |
"LOCALHOST" | Địa chỉ loopback (127.x.x.x) |
"LINK_LOCAL" | Địa chỉ local link (169.254.x.x) |
"MULTICAST" | Địa chỉ multicast (224.x.x.x - 239.x.x.x) |
"RESERVED" | Địa chỉ dành riêng (240.x.x.x+) |
"UNKNOWN" | Tra cứu thất bại hoặc loại địa chỉ không được hỗ trợ |
Ví dụ
# 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
}Tham Số Giao Dịch
Các trường này được trích xuất từ các tham số yêu cầu JSON-RPC. Tất cả các địa chỉ được chuẩn hóa thành chữ thường với tiền tố 0x để so sánh nhất quán.
input.from_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
Địa chỉ ví của người gửi. Điều này xác định ai đang khởi tạo giao dịch hoặc yêu cầu ký. Sử dụng trường này để triển khai danh sách cho phép/chặn cho các ví cụ thể hoặc để áp dụng các quy tắc chính sách khác nhau dựa trên người gửi.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].from |
eth_call | params[0].from |
eth_sign | params[0] |
personal_sign | params[1] |
eth_signTypedData | params[0] |
Ví dụ
# Only allow transactions from approved wallets
allowed_senders := {
"0x742d35cc6634c0532925a3b844bc9e7595f...",
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606..."
}
deny if {
not input.from_address in allowed_senders
}input.to_address
| Type | Example Value |
|---|---|
| string (nullable) | "0x742d35cc6634c0532925a3b844bc9e7595f..." |
Địa chỉ người nhận hoặc đích của giao dịch. Đây có thể là địa chỉ ví cho các giao dịch chuyển khoản đơn giản hoặc địa chỉ hợp đồng cho các tương tác hợp đồng. Giá trị là null khi triển khai hợp đồng mới (giao dịch tạo hợp đồng không có người nhận).
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].to |
eth_call | params[0].to |
eth_getBalance | params[0] |
eth_getTransactionCount | params[0] |
Ví dụ
# Block transactions to known malicious addresses
blocked_addresses := {
"0x000000000000000000000000000000000000dead",
"0x1234567890abcdef..."
}
deny if {
input.to_address in blocked_addresses
}input.contract_addresses
| Type | Example Value |
|---|---|
| array of strings | ["0x742d35cc...", "0xa0b86991..."] |
Một mảng các địa chỉ hợp đồng thông minh liên quan đến yêu cầu. Điều này đặc biệt hữu ích để kiểm soát những hợp đồng nào mà người dùng của bạn có thể tương tác. Mảng có thể chứa nhiều địa chỉ cho các phương thức như eth_getLogs có thể truy vấn nhiều hợp đồng.
Nguồn theo Phương Thức RPC
| Method | Parameter Location | Notes |
|---|---|---|
eth_sendTransaction | params[0].to | Chỉ khi có trường data hoặc input |
eth_call | params[0].to | Khi gọi hợp đồng |
eth_getCode | params[0] | Địa chỉ hợp đồng đích |
eth_getStorageAt | params[0] | Địa chỉ hợp đồng đích |
eth_getLogs | params[0].address | Có thể là địa chỉ đơn hoặc mảng |
Ví dụ
# 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
| Type | Example Value |
|---|---|
| string (nullable) | "0xde0b6b3a7640000" (1 ETH in hex) |
Giá trị token gốc được chuyển, được biểu thị bằng wei dưới dạng chuỗi thập lục phân. Wei là đơn vị nhỏ nhất của ETH (1 ETH = 10^18 wei). Đây là giá trị thô trên chuỗi - đối với các chính sách dựa trên USD, hãy sử dụng input.usd_value thay thế.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].value |
eth_call | params[0].value |
Ví dụ
# 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
| Type | Example Value |
|---|---|
| string (nullable) | "0x5208" (21000 in hex) |
Số lượng đơn vị gas tối đa mà giao dịch được phép tiêu thụ, dưới dạng chuỗi thập lục phân. Một giao dịch chuyển ETH đơn giản sử dụng 21.000 gas, trong khi các tương tác hợp đồng thường yêu cầu nhiều hơn.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gas |
eth_call | params[0].gas |
Ví dụ
# 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
| Type | Example Value |
|---|---|
| string (nullable) | "0x3b9aca00" (1 gwei in hex) |
Giá gas cho các giao dịch cũ (trước EIP-1559), được biểu thị bằng wei dưới dạng chuỗi thập lục phân. Trường này là null đối với các giao dịch EIP-1559 sử dụng max_fee_per_gas thay thế.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].gasPrice |
eth_call | params[0].gasPrice |
Ví dụ
# 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
| Type | Example Value |
|---|---|
| string (nullable) | "0x77359400" (2 gwei in hex) |
Phí tối đa cho mỗi đơn vị gas đối với các giao dịch EIP-1559, dưới dạng chuỗi thập lục phân. Đây là mức tối đa tuyệt đối mà người gửi sẵn sàng trả (phí cơ bản + phí ưu tiên). Chỉ có mặt cho các loại giao dịch EIP-1559.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxFeePerGas |
Ví dụ
# 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
| Type | Example Value |
|---|---|
| string (nullable) | "0x3b9aca00" (1 gwei in hex) |
Phí ưu tiên tối đa (tiền boa) cho mỗi đơn vị gas đối với các giao dịch EIP-1559, dưới dạng chuỗi thập lục phân. Đây là phần được chuyển cho người sản xuất khối như một động lực. Chỉ có mặt cho các loại giao dịch EIP-1559.
Nguồn theo Phương Thức RPC
| Method | Parameter Location |
|---|---|
eth_sendTransaction | params[0].maxPriorityFeePerGas |
Ví dụ
# 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
}Dữ Liệu Được Làm Giàu
Các trường này được tính toán bởi 256 Blocks để cung cấp ngữ cảnh bổ sung ngoài những gì có trong yêu cầu thô.
input.usd_value
| Type | Example Value |
|---|---|
| number (nullable) | 1500.50 |
Giá trị tương đương USD của giá trị token gốc của giao dịch (value_wei), được tính bằng cách sử dụng giá thị trường hiện tại. Đây là trường phổ biến nhất để triển khai giới hạn chi tiêu và kiểm soát tài trợ.
Giá được lấy mỗi phút từ các nguồn cấp giá đáng tin cậy (như Chainlink). Giá trị có thể là null nếu giao dịch không có giá trị (ví dụ: một cuộc gọi hợp đồng thuần túy).
Ví dụ
# 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
}Dữ Liệu Thô
Cho các trường hợp sử dụng nâng cao mà các trường có cấu trúc ở trên không cung cấp những gì bạn cần.
input.raw_params
| Type | Example Value |
|---|---|
| array | [{"from": "0x...", "to": "0x...", "value": "0x...", "data": "0x..."}] |
Mảng params JSON-RPC đầy đủ, không được sửa đổi từ yêu cầu gốc. Sử dụng điều này khi bạn cần truy cập các trường không được hiển thị thông qua các thuộc tính đầu vào có cấu trúc, chẳng hạn như:
- Dữ liệu gọi hợp đồng (trường
data) để phát hiện chữ ký hàm - Danh sách truy cập cho các giao dịch EIP-2930
- Các trường tùy chỉnh hoặc không chuẩn
Ví dụ
# 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")
}