1. Go to this page and download the library: Download olifanton/interop library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
olifanton / interop example snippets
declare(strict_types=1);
tring;
use Olifanton\Interop\Boc\Cell;
// Now you can use Interop classes
/**
* @param string | \Olifanton\Interop\Address $anyForm
*/
public function __construct(string | Address $anyForm)
/**
* @param bool|null $isUserFriendly User-friendly flag
* @param bool|null $isUrlSafe URL safe encoded flag
* @param bool|null $isBounceable Bounceable address flag
* @param bool|null $isTestOnly Testnet Only flag
*/
public function toString(?bool $isUserFriendly = null,
?bool $isUrlSafe = null,
?bool $isBounceable = null,
?bool $isTestOnly = null): string
/**
* @param int $length
*/
public function __construct(int $length)
/**
* @param int $n Position
*/
public function get(int $n): bool
/**
* @param int $n Position
*/
public function on(int $n): void
/**
* @param int $n Position
*/
public function off(int $n): void
/**
* @param int $n Position
*/
public function toggle(int $n): void
declare(strict_types=1);
use Olifanton\Interop\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"
/**
* @param int|bool $b
*/
public function writeBit(int | bool $b): void
/**
* @param array<int | bool> $ba Array of bits
*/
public function writeBitArray(array $ba): void
declare(strict_types=1);
use Olifanton\Interop\Boc\BitString;
$bs = new BitString(4);
$bs->writeBitArray([1, false, 0, true]);
foreach ($bs->iterate() as $b) {
echo (int)$b;
}
// Prints "1001"
/**
* @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
/**
* @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
/**
* @param \Olifanton\TypedArrays\Uint8Array $ui8 Byte array
*/
public function writeBytes(Uint8Array $ui8): void
/**
* @param string $value
*/
public function writeString(string $value): void
/**
* @param int|\Brick\Math\BigInteger $amount
*/
public function writeCoins(int | BigInteger $amount): void;
/**
* @param \Olifanton\Interop\Address|null $address TON Address
*/
public function writeAddress(?Address $address): void
/**
* @param \Olifanton\Interop\Boc\BitString $anotherBitString BitString instance
*/
public function writeBitString(BitString $anotherBitString): void
/**
* @param string|Uint8Array $serializedBoc Serialized BoC
* @return Cell[]
*/
public static function fromBoc(string|Uint8Array $serializedBoc): array
/**
* @param \Olifanton\TypedArrays\Uint8Array $array
* @param int $length
* @param \Olifanton\Interop\Boc\Slice[] $refs
*/
public function __construct(Uint8Array $array, int $length, array $refs)
/**
* @param int $n
*/
public function get(int $n): bool
/**
* @param int $bitLength
*/
public function loadBits(int $bitLength): Uint8Array
/**
* @param int $bitLength
*/
public function loadUint(int $bitLength): BigInteger
/**
* @param int $bitLength
*/
public function loadInt(int $bitLength): BigInteger
/**
* @param int $bitLength
*/
public function loadVarUint(int $bitLength): BigInteger
use Olifanton\Interop\Boc\Hashmap;
use Olifanton\Interop\Boc\DictSerializers;
use Olifanton\Interop\Boc\Builder;
use Olifanton\Interop\Boc\Cell;
use Brick\Math\BigInteger;
$dict = new Hashmap(
32, // Key size,
// KV marshalling setup
new DictSerializers(
// closure converts a number into a bit array, using an intermediate cell (created by Builder) and toBitsA() helper method of BitString class
keySerializer: static fn(int $userFriendlyKey, int $keySize): array => (new Builder())->writeInt($userFriendlyKey, $keySize)->cell()->bits->toBitsA(),
// closure converts a bit array into a number, using an intermediate cell (created by Builder)
keyDeserializer: static fn(array $bitsKey, int $keySize): int => (new Builder())->writeBitArray($bitsKey)->cell()->beginParse()->loadInt($keySize)->toInt(),
// closure writes BigInteger value into Cell
valueSerializer: static fn(BigInteger $userFriendlyValue): Cell => (new Builder())->writeUint($userFriendlyValue, 128)->cell(),
// closure loads BigInteger value from Cell
valueDeserializer: static fn(Cell $internalValue): BigInteger => $internalValue->beginParse()->loadUint(128),
)
);
// add value to dictionary
$dict->set(1, BigInteger::fromBase("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 16));
// now, internal Hashmap storage contains record with key [00000000000000000000000000000001] and Cell value
var_dump($dict->get(1)->toBase(10)); // 340282366920938463463374607431768211455