コード例 #1
0
        static Mining.Merkle AsMerkle(string hex)
        {
            var res = new Mining.Merkle();

            HexHelp.DecodeInto(res.blob, hex);
            return(res);
        }
コード例 #2
0
        /// <summary>
        /// Used by most algorithms. It's a simple sha256 of the coinbase. Can't get any simpler than that.
        /// </summary>
        static public Mining.Merkle SingleSha(byte[] coinbase)
        {
            var res = new Mining.Merkle();

            System.Security.Cryptography.SHA256.TryHashData(coinbase, res.blob, out var written);
            return(res);
        }
コード例 #3
0
        static Mining.Merkle AsMerkle(ReadOnlySpan <byte> blob)
        {
            var res = new Mining.Merkle();

            for (var cp = 0; cp < blob.Length; cp++)
            {
                res.blob[cp] = blob[cp];
            }
            return(res);
        }
コード例 #4
0
        /// <summary>
        /// For the time being, this is in fact always the same thing.
        /// </summary>
        /// <param name="root"></param>
        /// <param name="jobby"></param>
        /// <returns></returns>
        public static byte[] BlendMerkles(Mining.Merkle root, IReadOnlyList <Mining.Merkle> jobby)
        {
            Span <byte> merkleSha = stackalloc byte[64];

            for (var cp = 0; cp < 32; cp++)
            {
                merkleSha[cp] = root.blob[cp];
            }
            foreach (var el in jobby)
            {
                for (var cp = 0; cp < 32; cp++)
                {
                    merkleSha[cp + 32] = el.blob[cp];
                }
                BlendMerklePackedInto(merkleSha);
            }
            return(merkleSha[0..32].ToArray());
コード例 #5
0
        public void BlendingMatchesGolden(byte[] root, byte[] merkle, byte[] expected)
        {
            var mroot = new Mining.Merkle();
            var mmerk = new Mining.Merkle[1] {
                new Mining.Merkle()
            };

            for (var loop = 0; loop < mroot.blob.Length; loop++)
            {
                mroot.blob[loop] = root[loop];
            }
            for (var loop = 0; loop < mmerk[0].blob.Length; loop++)
            {
                mmerk[0].blob[loop] = merkle[loop];
            }
            var calc = Merkles.BlendMerkles(mroot, mmerk);

            Assert.Equal(calc, expected);
        }