Solidity ABI 参数表单

真实场景:为 Solidity 智能合约函数输入参数。

场景说明

这个例子模拟了 Web3 应用中常见的场景:用户需要为智能合约函数提供参数。该场景完美展示了:

  • ✅ 动态数组(地址列表、金额列表)
  • ✅ 嵌套结构(tuple/struct 类型)
  • ✅ 类型验证(地址格式、数值范围)
  • ✅ 数组长度一致性校验

函数签名

function transferBatch(
  address[] memory recipients,
  uint256[] memory amounts,
  struct Metadata {
    string memo,
    uint8 priority,
    uint256 deadline
  } memory metadata
) external

代码示例

const form = useFormState({
  fields: {
    'recipients': {
      defaultValue: [''],
      validator: Validators.required('至少需要一个接收者')
    },
    'metadata.memo': {
      defaultValue: '',
      validator: Validators.maxLength(100, '不能超过100字符')
    }
  }
});

// 动态数组字段
<FieldArray name="recipients" formState={form}>
  {#snippet children({ fields, append, remove })}
    {#each fields as field, index (field.key)}
      <FormField name={`recipients[${index}]`} formState={form}>
        ...
      </FormField>
    {/each}
    <button onclick={() => append('')}>添加</button>
  {/snippet}
</FieldArray>

交互演示

recipients

address[]

接收者地址数组

[0]

amounts

uint256[]

转账金额数组(需与地址数组长度一致)

[0]
ETH

metadata

tuple

交易元数据结构

memo string
priority uint8
低 (1) 1 高 (5)
deadline uint256

表单数据预览

当前参数值
{
  "recipients": [
    ""
  ],
  "amounts": [
    ""
  ],
  "metadata": {
    "memo": "",
    "priority": 1,
    "deadline": ""
  }
}
验证错误
{}