rht / merkle-tree
PHP中Merkle树的实现
2.0.0
2020-11-02 05:11 UTC
Requires
- php: >=7.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.4
- phpunit/phpunit: ^6.5 || ^7.5 || ^8.5 || ^9.4
- sanmai/phpunit-legacy-adapter: ^6 || ^8
This package is auto-updated.
Last update: 2024-09-27 13:29:28 UTC
README
这是一个为PHP实现的哈希树或Merkle树。
安装
通过 Composer 安装(确保您的路径或项目中已安装Composer)。
在您的 package.json 中添加以下内容
{ "require": { "rht/merkle-tree": "*" } }
然后运行 composer install。
固定大小树的用法
使用哈希树时,需要用户提供一个哈希函数,每个节点将使用该函数进行哈希。此函数必须接受一个字符串参数,并且必须始终返回一个字符串。它不应抛出异常。
如果需要,您还可以提供一个回调,以便在完成整个哈希树时执行,而不是每次都自行检查。
<?php use Rht\Merkle\FixedSizeTree; require 'vendor/autoload.php'; // basically the same thing bitcoin merkle tree hashing does $hasher = function ($data) { return hash('sha256', hash('sha256', $data, true), true); }; $finished = function ($hash) { echo implode('', unpack('H*', $hash)) . "\n"; }; $tree = new FixedSizeTree(16, $hasher, $finished); $tree->set(0, 'Science'); $tree->set(1, 'is'); $tree->set(2, 'made'); $tree->set(3, 'up'); $tree->set(4, 'of'); $tree->set(5, 'so'); $tree->set(6, 'many'); $tree->set(7, 'things'); $tree->set(8, 'that'); $tree->set(9, 'appear'); $tree->set(10, 'obvious'); $tree->set(11, 'after'); $tree->set(12, 'they'); $tree->set(13, 'are'); $tree->set(14, 'explained'); $tree->set(15, '.'); // this will echo the string 'c689102cdf2a5b30c2e21fdad85e4bb401085227aff672a7240ceb3410ff1fb6'
此https://github.com/pleonasm/merkle-tree分支有一个FixedSizeTree,它以Ethereum相同的方式实现了Merkle Patricia树。而pleonasm/merkle-tree以比特币相同的方式实现它。还有其他方式来实际处理树宽不是完全平方数的情况。
如果需要其他方法,我不会反对添加它。
从1.0升级
1.0和2.0之间的区别应该非常小。如果您只使用FixedSizeTree的公共接口,除了几个错误处理更改外,那么您应该可以正常使用。
新的实现大大简化了,并且对于大型树来说要快得多。我的最新基准测试显示,1.0需要100秒来填充一个10000项的树,而2.0只需要0.2秒。
尽管如此,这从技术上讲是一个不兼容的更改,因此需要进行主要版本号的升级。
许可证
您可以在LICENSE文件中找到此代码的许可证。