library MerkleTreiTree { static function addTxid(bytes txid, bytes oldMerkleRoot, bytes merklePath) : bytes { Ripemd160 oldMerkleValue = hash160(b'0000000000000000000000000000000000000000000000000000000000000000'); Ripemd160 newMerkleValue = hash160(txid); int key = Utils.fromLEUnsigned(txid); loop (32) : i { int index = key % 256; key = key / 256; int rightNum = 255 - index; int start = (i * 5100); int pos = start + index * 20; bytes leftNeighbor = merklePath[start : pos]; bytes rightNeighbor = merklePath[pos : pos + rightNum * 20]; oldMerkleValue = hash160(leftNeighbor + oldMerkleValue + rightNeighbor); newMerkleValue = hash160(leftNeighbor + newMerkleValue + rightNeighbor); } require(newMerkleValue != oldMerkleRoot); require(oldMerkleValue == oldMerkleRoot); return newMerkleValue; } }