| 
<?phpdeclare(strict_types=1);
 
 use \ParagonIE\Halite\Structure\{
 BlockChain,
 MerkleTree,
 Node
 };
 
 /**
 * @backupGlobals disabled
 * @backupStaticAttributes disabled
 */
 class BlockChainTest extends PHPUnit_Framework_TestCase
 {
 public function testChain()
 {
 $trees = [
 new MerkleTree(
 new Node('418 i am a little teapot'),
 new Node('yellow submarine'),
 new Node('paragon initiative enterprises'),
 new Node('application security')
 ),
 new MerkleTree(
 new Node('cryptography'),
 new Node('engineering'),
 new Node('for complete noobcakes')
 ),
 new MerkleTree(
 new Node('418 i am a little teapot'),
 new Node('yellow submarine'),
 new Node('paragon initiative enterprises'),
 new Node('application security'),
 new Node('cryptography'),
 new Node('engineering'),
 new Node('for complete noobcakes')
 )
 ];
 $begin = \Sodium\crypto_generichash('GENESIS BLOCK');
 $bc1 = new BlockChain($begin, $trees[0]);
 $bc2 = new BlockChain($bc1->getHash(true), $trees[1]);
 $bc3 = new BlockChain($begin, $trees[0], $trees[1]);
 $bc4 = new BlockChain($begin, $trees[2]);
 
 $treeTest = $trees[0]->getExpandedTree(
 new Node('cryptography'),
 new Node('engineering'),
 new Node('for complete noobcakes')
 );
 $bc5 = new BlockChain($begin, $treeTest);
 
 // The output of one block feeding into the next should match:
 $this->assertEquals($bc2->getHash(), $bc3->getHash());
 
 // We shouldn't allow blocks to be appeneded:
 $this->assertNotEquals($bc3->getHash(), $bc4->getHash());
 
 // However, if we create a new block, it should be OK:
 $this->assertEquals($bc4->getHash(), $bc5->getHash());
 }
 }
 
 |