Skip to content

Commit

Permalink
Merge pull request #15 from Ghost-Drive/Ghost-Drive-patch-1
Browse files Browse the repository at this point in the history
Slice parsing
  • Loading branch information
romanzaycev committed Jun 18, 2024
2 parents e39b5ed + 0e58de0 commit 3d838f8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,11 @@ private static function parseObject(array $entry): mixed
return match ($typeName) {
"tvm.list", "tvm.tuple" => array_map(static fn(array $e) => self::parseObject($e), $entry["elements"]),
"tvm.cell" => Cell::oneFromBoc($entry["bytes"], true),
"tvm.slice" => Cell::oneFromBoc($entry["bytes"], true)->beginParse(),
"tvm.stackEntryCell" => self::parseObject($entry["cell"]),
"tvm.stackEntryTuple" => self::parseObject($entry["tuple"]),
"tvm.stackEntryNumber" => self::parseObject($entry["number"]),
"tvm.stackEntrySlice" => self::parseObject($entry["slice"]),
"tvm.numberDecimal" => BigInteger::fromBase($entry["number"], 10),
default => throw new ResponseStackParsingException(
"Unknown type: " . $typeName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Olifanton\Ton\Tests\Transports\Toncenter\ToncenterTransport;

use Olifanton\Interop\Boc\Cell;
use Olifanton\Interop\Boc\Slice;
use Olifanton\Ton\Transports\Toncenter\ToncenterResponseStack;
use PHPUnit\Framework\TestCase;

Expand Down Expand Up @@ -124,4 +125,30 @@ public function testSerialization(): void

$this->assertEquals($stack, $hibernated);
}

/**
* @throws \Throwable
*/
public function testParseSlice(): void
{
$stack = ToncenterResponseStack::parse([
[
'tuple',
[
'elements' => [
'slice' => [
'@type' => 'tvm.slice',
'bytes' => 'te6cckEBAQEAJAAAQ4AAfVvsWElajYlLb4F8fIyqLMQ5C7fmIG3GgSHEjI54E7D+9neY',
],
],
]
],
]);

$this->assertCount(1, $stack);
$slice = $stack->currentTuple()['slice'];
$this->assertInstanceOf(Slice::class, $slice);
$address = $slice->loadAddress()->toString(true, true, true);
$this->assertEquals('EQAD6t9iwkrUbEpbfAvj5GVRZiHIXb8xA240CQ4kZHPAnSuo', $address);
}
}

0 comments on commit 3d838f8

Please sign in to comment.