此包已被放弃,不再维护。作者建议使用olifanton/interop包代替。

BOC (Bag of Cells) PHP序列化库

0.4.1 2022-12-22 14:42 UTC

This package is auto-updated.

Last update: 2023-04-08 05:44:06 UTC


README

BOC (Bag of Cells) PHP序列化库

Code Coverage Badge Tests Latest Stable Version Total Downloads

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