github.com/ethereum/go-ethereum@v1.16.1/accounts/abi/bind/v2/internal/contracts/nested_libraries/contract.sol (about) 1 // SPDX-License-Identifier: MIT 2 pragma solidity ^0.8.26; 3 4 5 // L1 6 // \ 7 // L2 L3 L1 8 // \ / / 9 // L4 / 10 // \ / 11 // C1 12 // 13 library L1 { 14 function Do(uint256 val) public pure returns (uint256) { 15 return uint256(1); 16 } 17 } 18 19 library L2 { 20 function Do(uint256 val) public pure returns (uint256) { 21 return L1.Do(val) + uint256(1); 22 } 23 } 24 25 library L3 { 26 function Do(uint256 val) public pure returns (uint256) { 27 return uint256(1); 28 } 29 } 30 31 library L4 { 32 function Do(uint256 val) public pure returns (uint256) { 33 return L2.Do(uint256(val)) + L3.Do(uint256(val)) + uint256(1); 34 } 35 } 36 37 contract C1 { 38 function Do(uint256 val) public pure returns (uint256 res) { 39 return L4.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1); 40 } 41 42 constructor(uint256 v1, uint256 v2) { 43 // do something with these 44 } 45 } 46 47 // second contract+libraries: slightly different library deps than V1, but sharing several 48 // L1 49 // \ 50 // L2b L3 L1 51 // \ / / 52 // L4b / 53 // \ / 54 // C2 55 // 56 library L4b { 57 function Do(uint256 val) public pure returns (uint256) { 58 return L2b.Do(uint256(val)) + uint256(1); 59 } 60 } 61 62 library L2b { 63 function Do(uint256 val) public pure returns (uint256) { 64 return L1.Do(uint256(val)) + uint256(1); 65 } 66 } 67 68 contract C2 { 69 function Do(uint256 val) public pure returns (uint256 res) { 70 return L4b.Do(uint256(val)) + L1.Do(uint256(0)) + uint256(1); 71 } 72 73 constructor(uint256 v1, uint256 v2) { 74 // do something with these 75 } 76 }