olifanton / boc
Requires
- php: >=8.1
- myclabs/deep-copy: ^1.11
- olifanton/utils: ^0.4
Requires (Dev)
- phpunit/phpunit: ^9.5
README
BOC (Bag of Cells) PHP序列化库
PHP版本的tonweb-boc
JS库
安装
composer require olifanton/boc
文档
入门
通过Composer安装olifanton/boc
包并包含自动加载脚本
<?php declare(strict_types=1); require __DIR__ . "/vendor/autoload.php"; use Olifanton\Boc\BitString; use Olifanton\Boc\Cell; // Now you can use BoC classes
库类
Olifanton\Boc\BitString
BitString
是一个允许您操作二进制数据的类。BitString
是PHP表示TVM Cells的核心。BitString
针对存储二进制数据进行内存优化。内部,BitString使用ajf/typed-arrays
包提供的Uint8Array
实现,并作为在Olifanton库部分之间传输二进制数据的基本类型。
BitString实例以严格固定的长度创建。write%
(writeBit,writeUint等)方法移动内部游标。如果您尝试写入超出空闲位数长度的值,将抛出BitStringException
异常。
BitString构造函数
/** * @param int $length */ public function __construct(int $length)
参数
$length
— Uint8Array的长度。TVM Cell的默认值:1023(文档)
BitString方法
getFreeBits(): int
返回BitString的未使用位数长度。
getUsedBits(): int
返回BitString的已使用位数长度。
getUsedBytes(): int
返回BitString的已使用字节数长度。
get(): bool
/** * @param int $n Position */ public function get(int $n): bool
返回位置$n
处的位值。
on(): void
/** * @param int $n Position */ public function on(int $n): void
将位置$n
处的位值设置为1。
off(): void
/** * @param int $n Position */ public function off(int $n): void
将位置$n
处的位值设置为0。
toggle(): void
/** * @param int $n Position */ public function toggle(int $n): void
切换(取反)位置 $n
的位值。
iterate(): \Generator
返回已使用位的生成器。
示例
<?php declare(strict_types=1); use Olifanton\Boc\BitString; $bs = new BitString(4); $bs->writeBit(1); $bs->writeBit(0); $bs->writeBit(1); $bs->writeBit(1); foreach ($bs->iterate() as $b) { echo (int)$b; } // Prints "1011"
writeBit(): void
/** * @param int|bool $b */ public function writeBit(int | bool $b): void
写入位并增加 BitString 内部游标。
writeBitArray(): void
/** * @param array<int | bool> $ba Array of bits */ public function writeBitArray(array $ba): void
写入位数组。
示例
<?php declare(strict_types=1); use Olifanton\Boc\BitString; $bs = new BitString(4); $bs->writeBitArray([1, false, 0, true]); foreach ($bs->iterate() as $b) { echo (int)$b; } // Prints "1001"
writeUint(): void
/** * @param int|\Brick\Math\BigInteger $number Unsigned integer * @param int $bitLength Integer size (8, 16, 32, ...) */ public function writeUint(int | BigInteger $number, int $bitLength): void
写入 $bitLength 位无符号整数。
writeInt(): void
/** * @param int|\Brick\Math\BigInteger $number Signed integer * @param int $bitLength Integer size (8, 16, 32, ...) */ public function writeInt(int | BigInteger $number, int $bitLength): void
写入 $bitLength 位有符号整数。
writeUint8(): void
是 writeUint()
方法的别名,具有预定义的 $bitLength 参数值。
writeBytes(): void
/** * @param \ajf\TypedArrays\Uint8Array $ui8 Byte array */ public function writeBytes(Uint8Array $ui8): void
写入无符号 8 位整数数组。
writeString(): void
/** * @param string $value */ public function writeString(string $value): void
写入 UTF-8 字符串。
writeCoins(): void
/** * @param int|\Brick\Math\BigInteger $amount */ public function writeCoins(int | BigInteger $amount): void;
以纳诺吨币的形式写入币。1 TON === 1000000000 (10^9) 纳诺吨币。
writeAddress(): void
/** * @param \Olifanton\Utils\Address|null $address TON Address */ public function writeAddress(?Address $address): void
写入 TON 地址。请参阅 olifanton/utils 包中的地址实现。
writeBitString(): void
/** * @param \Olifanton\Boc\BitString $anotherBitString BitString instance */ public function writeBitString(BitString $anotherBitString): void
将另一个 BitString 写入此 BitString。
clone(): BitString
克隆此 BitString 并返回新的 BitString 实例。
toHex(): string
返回 BitString 的十六进制字符串表示。
getImmutableArray(): Uint8Array
返回内部 Uint8Array 的不可变副本。
getLength(): int
返回 BitString 的大小(位)。
Olifanton\Boc\Cell
Cell
是一个类,它实现了 PHP 中 TVM Cells 的概念。要创建新消息和处理从区块链接收的消息,您将使用 Cell 类的实例。
Cell 构造函数
无参数。
Cell 方法
fromBoc(): Array<Cell>
/** * @param string|Uint8Array $serializedBoc Serialized BoC * @return Cell[] */ public static function fromBoc(string|Uint8Array $serializedBoc): array
从字节数组或十六进制字符串创建 Cell 数组。
oneFromBoc(): Cell
/** * @param string|Uint8Array $serializedBoc Serialized BoC * @param bool $isBase64 Base64-serialized flag, default false */ public static function oneFromBoc(string|Uint8Array $serializedBoc, bool $isBase64 = false): Cell
从字节数组或十六进制字符串获取一个根 Cell。
writeCell(): void
/** * @param Cell $anotherCell Another cell * @return Cell This Cell */ public function writeCell(Cell $anotherCell): self
将另一个 Cell 写入此单元格并返回此单元格。可变方法。
getMaxDepth(): int
返回子单元的最大深度。
getBits(): BitString
返回用于写入和读取的内部 BitString 实例。
getRefs(): ArrayObject |
返回子单元的类似数组的对象。
hash(): Uint8Array
返回此单元的 SHA-256 哈希。
print(): string
递归打印单元内容,类似于 Fift。
toBoc(): Uint8Array
/** * @param bool $has_idx Default _true_ * @param bool $hash_crc32 Default _true_ * @param bool $has_cache_bits Default _false_ * @param int $flags Default _0_ */ public function toBoc(bool $has_idx = true, bool $hash_crc32 = true, bool $has_cache_bits = false, int $flags = 0): Uint8Array
创建 BoC 字节数组。
Olifanton\Boc\Slice
Slice
是单元切片的类型。一个单元可以被转换成切片,然后可以通过从切片中加载来获取单元的数据位和其他单元的引用。
load%
(loadBit, loadUint, ...) 方法移动 Slice 内部游标。如果您尝试读取超出自由位长度的值,将抛出 SliceException
异常。
Slice 构造函数
/** * @param \ajf\TypedArrays\Uint8Array $array * @param int $length * @param \Olifanton\Boc\Slice[] $refs */ public function __construct(Uint8Array $array, int $length, array $refs)
参数
$array
— 来自单元 BitString 表示的 Uint8Array$length
— BitString 长度$refs
— 子单元切片
Slice 方法
getFreeBits(): int
根据内部游标返回未读位。
get(): bool
/** * @param int $n */ public function get(int $n): bool
返回位置 $n
的位值。
loadBit(): bool
读取位并移动游标。
loadBits(): Uint8Array
/** * @param int $bitLength */ public function loadBits(int $bitLength): Uint8Array
读取位数组。
loadUint(): BigInteger
/** * @param int $bitLength */ public function loadUint(int $bitLength): BigInteger
读取无符号整数。
loadInt(): BigInteger
/** * @param int $bitLength */ public function loadInt(int $bitLength): BigInteger
读取有符号整数。
loadVarUint(): BigInteger
/** * @param int $bitLength */ public function loadVarUint(int $bitLength): BigInteger
loadCoins(): BigInteger
读取 nanotoncoins 的 TON 金额。
loadAddress(): ?Address
读取 Address。
loadRef(): Slice
读取子单元的 Slice。
测试
composer run test
许可
MIT