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); }