PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo-forks/avalanchejs/src/serializable/codec
Просмотр файла: manager.ts
import { DEFAULT_CODEC_VERSION } from '../../constants/codec';
import { concatBytes } from '../../utils/buffer';
import type { FromBytesReturn } from '../../utils/struct';
import { unpack } from '../../utils/struct';
import type { Transaction } from '../../vms/common/transaction';
import type { Serializable, SerializableStatic } from '../common/types';
import { Short } from '../primitives';
import type { Codec } from './codec';
/**
* @see https://github.com/ava-labs/avalanchego/blob/master/codec/manager.go
*/
export class Manager {
codecs: Record<number, Codec> = {};
RegisterCodec(version: number, codec: Codec) {
if (version in this.codecs) {
throw new Error('duplicated codec version');
}
this.codecs[version] = codec;
}
unpack = <T extends SerializableStatic>(
buff: Uint8Array,
unpacker: T,
): FromBytesReturn<T> => {
const [codec, rest] = this.getCodecFromBuffer(buff);
// TODO: try to do this without casting
return unpacker.fromBytes(rest, codec)[0] as FromBytesReturn<T>;
};
unpackTransaction = (buff: Uint8Array): Transaction => {
const [codec, rest] = this.getCodecFromBuffer(buff);
return codec.UnpackPrefix<Transaction>(rest)[0];
};
public getCodecFromBuffer(buff: Uint8Array): [Codec, Uint8Array] {
const [codecId, rest] = unpack(buff, [Short]);
const codec = this.getCodecForVersion(codecId);
return [codec, rest];
}
getCodecForVersion(codecId: Short): Codec {
if (!this.codecs[codecId.value()]) {
throw new Error(`codec id(${codecId.value()}) not found`);
}
return this.codecs[codecId.value()];
}
getDefaultCodec() {
return this.getCodecForVersion(new Short(DEFAULT_CODEC_VERSION));
}
getDefaultCodecId() {
return new Short(DEFAULT_CODEC_VERSION);
}
packCodec(
serializable: Serializable,
codecVersion = DEFAULT_CODEC_VERSION,
): Uint8Array {
const codecIdShort = new Short(codecVersion);
const codec = this.getCodecForVersion(codecIdShort);
return concatBytes(codecIdShort.toBytes(), codec.PackPrefix(serializable));
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!