public void EnsuresByteCodeDoesNotContainPlaceholders()
        {
            const string EXPECTED_MESSAGE = "The byte code contains library address placeholders (prefix: '__$', suffix: '$__').";
            var          contractByteCode = "608060405234801561001057600080fd5b5061025e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806379a7b63414610030575b600080fd5b6100386100ad565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561007257818101518382015260200161005a565b50505050905090810190601f16801561009f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6060600073__$4f6e1f7166b61d394a3a463d15dc4917b6$__63cfb519286040518163ffffffff1660e01b8152600401808060200182810382526002815260200180600160f11b611a190281525060200191505060206040518083038186803b15801561011957600080fd5b505af415801561012d573d6000803e3d6000fd5b505050506040513d602081101561014357600080fd5b505160408051600160e01b638e5fc30b02815260048101839052600060248201819052915192935073__$4f6e1f7166b61d394a3a463d15dc4917b6$__92638e5fc30b92604480840193919291829003018186803b1580156101a457600080fd5b505af41580156101b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156101e157600080fd5b8101908080516401000000008111156101f957600080fd5b8201602081018481111561020c57600080fd5b815164010000000081118282018710171561022657600080fd5b5090969550505050505056fea165627a7a723058207c1a7d9742f9ca8ee9b88baeb793a3ca5a975d11d8c0b721c5421bcef3ad66220029";
            var          exception        = Assert.Throws <Exception>(() => ByteCodeLibraryLinker.EnsureDoesNotContainPlaceholders(contractByteCode));

            Assert.Equal(EXPECTED_MESSAGE, exception.Message);
        }
        public void LinksLibraries()
        {
            const string LIBRARY_ADDRESS = "";

            var libFullPath    = "c:/Users/Kevin/Documents/GitHub/Nethereum_SapIntegrationPoC/PurchaseContracts/contracts/StringLib.sol";
            var libName        = "StringLib";
            var libraryMapping = ByteCodeLibrary.CreateFromPath(libFullPath, libName, LIBRARY_ADDRESS);
            var libraryExpectedPlaceholderKey = "4f6e1f7166b61d394a3a463d15dc4917b6";

            Assert.Equal(libraryExpectedPlaceholderKey, libraryMapping.PlaceholderKey);

            // Link main contract byte code with the library, in preparation for deployment
            var contractByteCode       = "608060405234801561001057600080fd5b5061025e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806379a7b63414610030575b600080fd5b6100386100ad565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561007257818101518382015260200161005a565b50505050905090810190601f16801561009f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6060600073__$4f6e1f7166b61d394a3a463d15dc4917b6$__63cfb519286040518163ffffffff1660e01b8152600401808060200182810382526002815260200180600160f11b611a190281525060200191505060206040518083038186803b15801561011957600080fd5b505af415801561012d573d6000803e3d6000fd5b505050506040513d602081101561014357600080fd5b505160408051600160e01b638e5fc30b02815260048101839052600060248201819052915192935073__$4f6e1f7166b61d394a3a463d15dc4917b6$__92638e5fc30b92604480840193919291829003018186803b1580156101a457600080fd5b505af41580156101b8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156101e157600080fd5b8101908080516401000000008111156101f957600080fd5b8201602081018481111561020c57600080fd5b815164010000000081118282018710171561022657600080fd5b5090969550505050505056fea165627a7a723058207c1a7d9742f9ca8ee9b88baeb793a3ca5a975d11d8c0b721c5421bcef3ad66220029";
            var libraryMappings        = new ByteCodeLibrary[] { libraryMapping };
            var libraryLinker          = new ByteCodeLibraryLinker();
            var contractByteCodeLinked = libraryLinker.LinkByteCode(contractByteCode, libraryMappings);

            // should be no link placeholders now
            ByteCodeLibraryLinker.EnsureDoesNotContainPlaceholders(contractByteCodeLinked);
        }
 public void EnsureByteCodeDoesNotContainPlaceholders(string byteCode)
 {
     ByteCodeLibraryLinker.EnsureDoesNotContainPlaceholders(byteCode);
 }