KIT

编码器

Encoder<TFrom> = FixedSizeEncoder<TFrom> | VariableSizeEncoder<TFrom>

一个可以将类型为 TFrom 的值编码为 ReadonlyUint8Array 的对象。

Encoder 可以是:

类型参数

类型参数描述
TFrom要编码的值的类型。

示例

将一个值编码为一个新的字节数组。

const encoder: Encoder<string>;
const bytes = encoder.encode('hello');

将编码后的值写入到现有的字节数组中。

const encoder: Encoder<string>;
const bytes = new Uint8Array(100);
const nextOffset = encoder.write('hello', bytes, 20);

备注

你可以使用 createEncoder 函数手动创建 Encoders,但更常见的做法是 使用 @solana/codecs 包的各种帮助程序将多个 Encoders 组合在一起。

例如,以下是如何为包含 name 字符串和 age 数字的 Person 对象类型创建 Encoder 的方法:

import { getStructEncoder, addEncoderSizePrefix, getUtf8Encoder, getU32Encoder } from '@solana/codecs';
 
type Person = { name: string; age: number };
const getPersonEncoder = (): Encoder<Person> =>
    getStructEncoder([
        ['name', addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder())],
        ['age', getU32Encoder()],
    ]);

请注意,组合的 Encoder 类型非常聪明,可以理解它们是固定大小还是可变大小。 在上面的示例中,getU32Encoder() 是 一个固定大小的编码器,而 addEncoderSizePrefix(getUtf8Encoder(), getU32Encoder()) 是一个可变大小的编码器。 这使得最终的 Person 编码器成为一个可变大小的编码器。

参见

On this page