Icon Link向量

在 Sway 中,向量是具有相同类型的动态大小元素集合。向量可以持有任意类型,包括非原始类型。

Icon Link在 SDK 中使用向量

在 Sway 中,基本的向量类似于 TypeScript 数组:

// Sway Vec<u8>
const basicU8Vector = [1, 2, 3];

考虑下面的 Sway 中 EmployeeData 结构体的示例:

pub struct EmployeeData {
    name: str[8],
    age: u8,
    salary: u64,
    idHash: b256,
    ratings: [u8; 3],
    isActive: bool,
}

现在,让我们看一下以下合约方法。它接收一个 Transaction 结构体类型的向量作为参数,并返回向量中的最后一个 Transaction 条目:

fn echo_last_employee_data(employee_data_vector: Vec<EmployeeData>) -> EmployeeData {
    employee_data_vector.get(employee_data_vector.len() - 1).unwrap()
}

下面的代码片段演示了如何调用这个接受 Vec<Transaction> 的 Sway 合约方法:

// #import { getRandomB256 };
 
const employees = [
  {
    name: 'John Doe',
    age: 30,
    salary: 8000,
    idHash: getRandomB256(),
    ratings: [1, 2, 3],
    isActive: true,
  },
  {
    name: 'Everyman',
    age: 31,
    salary: 9000,
    idHash: getRandomB256(),
    ratings: [5, 6, 7],
    isActive: true,
  },
];
const { value } = await contract.functions.echo_last_employee_data(employees).simulate();

Icon Link将字节码转换为向量

有些函数需要您将字节码传递给函数。字节码参数的类型通常是 Vec<u8>,以下是如何将字节码传递给函数的示例:

fn compute_bytecode_root(bytecode_input: Vec<u8>) -> b256 {
    //simply return a fixed b256 value created from a hexadecimal string from testing purposes
    return 0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20;
}

要将字节码传递给此函数,您可以使用 arrayify 函数将字节码文件内容转换为 UInt8Array,这是 Sway 的 Vec<u8> 类型的 TS 兼容类型,然后将其传递给函数:

// #import { arrayify, readFile };
 
const bytecode = await readFile(bytecodePath);
const bytecodeAsVecU8 = arrayify(bytecode);
 
const { value: bytecodeRoot } = await bytecodeContract.functions
  .compute_bytecode_root(bytecodeAsVecU8)
  .call();