Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
843541 | 25 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
RefuelSwapAndBridgeController
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.11
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import {ISocketRequest} from "../interfaces/ISocketRequest.sol"; import {ISocketRoute} from "../interfaces/ISocketRoute.sol"; import {BaseController} from "./BaseController.sol"; /** * @title RefuelSwapAndBridge Controller Implementation * @notice Controller with composed actions for Refuel,Swap and Bridge to be executed Sequentially and this is atomic * @author Socket dot tech. */ contract RefuelSwapAndBridgeController is BaseController { /// @notice Function-selector to invoke refuel-swap-bridge function /// @dev This function selector is to be used while buidling transaction-data bytes4 public immutable REFUEL_SWAP_BRIDGE_FUNCTION_SELECTOR = bytes4( keccak256( "refuelAndSwapAndBridge((uint32,bytes,uint32,bytes,uint32,bytes))" ) ); /// @notice socketGatewayAddress to be initialised via storage variable BaseController constructor( address _socketGatewayAddress ) BaseController(_socketGatewayAddress) {} /** * @notice function to handle refuel followed by Swap and Bridge actions * @notice This method is payable because the caller is doing token transfer and briding operation * @param rsbRequest Request with data to execute refuel followed by swap and bridge * @return output data from bridging operation */ function refuelAndSwapAndBridge( ISocketRequest.RefuelSwapBridgeRequest calldata rsbRequest ) public payable returns (bytes memory) { _executeRoute(rsbRequest.refuelRouteId, rsbRequest.refuelData); // refuel is also a bridging activity via refuel-route-implementation bytes memory swapResponseData = _executeRoute( rsbRequest.swapRouteId, rsbRequest.swapData ); (uint256 swapAmount, ) = abi.decode( swapResponseData, (uint256, address) ); //sequence of arguments for implData: amount, token, data // Bridging the swapAmount received in the preceeding step bytes memory bridgeImpldata = abi.encodeWithSelector( BRIDGE_AFTER_SWAP_SELECTOR, swapAmount, rsbRequest.bridgeData ); return _executeRoute(rsbRequest.bridgeRouteId, bridgeImpldata); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @title ISocketRoute * @notice Interface for routeManagement functions in SocketGateway. * @author Socket dot tech. */ interface ISocketRoute { /** * @notice Add route to the socketGateway This is a restricted function to be called by only socketGatewayOwner * @dev ensure routeAddress is a verified bridge or middleware implementation address * @param routeAddress The address of bridge or middleware implementation contract deployed * @return Id of the route added to the routes-mapping in socketGateway storage */ function addRoute(address routeAddress) external returns (uint256); /** * @notice disable a route by setting ZeroAddress to the entry in routes-mapping identified by routeId as key. This is a restricted function to be called by only socketGatewayOwner * @param routeId The Id of route-implementation in the routes mapping */ function disableRoute(uint32 routeId) external; /** * @notice Get routeImplementation address mapped to the routeId * @param routeId routeId is the key in the mapping for routes * @return route-implementation address */ function getRoute(uint32 routeId) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** * @title ISocketRoute * @notice Interface with Request DataStructures to invoke controller functions. * @author Socket dot tech. */ interface ISocketRequest { struct SwapMultiBridgeRequest { uint32 swapRouteId; bytes swapImplData; uint32[] bridgeRouteIds; bytes[] bridgeImplDataItems; uint256[] bridgeRatios; bytes[] eventDataItems; } // Datastructure for Refuel-Swap-Bridge function struct RefuelSwapBridgeRequest { uint32 refuelRouteId; bytes refuelData; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } // Datastructure for DeductFees-Swap function struct FeesTakerSwapRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 routeId; bytes swapRequestData; } // Datastructure for DeductFees-Bridge function struct FeesTakerBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 routeId; bytes bridgeRequestData; } // Datastructure for DeductFees-MultiBridge function struct FeesTakerMultiBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32[] bridgeRouteIds; bytes[] bridgeRequestDataItems; } // Datastructure for DeductFees-Swap-Bridge function struct FeesTakerSwapBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } // Datastructure for DeductFees-Refuel-Swap-Bridge function struct FeesTakerRefuelSwapBridgeRequest { address feesTakerAddress; address feesToken; uint256 feesAmount; uint32 refuelRouteId; bytes refuelData; uint32 swapRouteId; bytes swapData; uint32 bridgeRouteId; bytes bridgeData; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import {ISocketRequest} from "../interfaces/ISocketRequest.sol"; import {ISocketRoute} from "../interfaces/ISocketRoute.sol"; /// @title BaseController Controller /// @notice Base contract for all controller contracts abstract contract BaseController { /// @notice Address used to identify if it is a native token transfer or not address public immutable NATIVE_TOKEN_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); /// @notice Address used to identify if it is a Zero address address public immutable NULL_ADDRESS = address(0); /// @notice FunctionSelector used to delegatecall from swap to the function of bridge router implementation bytes4 public immutable BRIDGE_AFTER_SWAP_SELECTOR = bytes4(keccak256("bridgeAfterSwap(uint256,bytes)")); /// @notice immutable variable to store the socketGateway address address public immutable socketGatewayAddress; /// @notice immutable variable with instance of SocketRoute to access route functions ISocketRoute public immutable socketRoute; /** * @notice Construct the base for all controllers. * @param _socketGatewayAddress Socketgateway address, an immutable variable to set. * @notice initialize the immutable variables of SocketRoute, SocketGateway */ constructor(address _socketGatewayAddress) { socketGatewayAddress = _socketGatewayAddress; socketRoute = ISocketRoute(_socketGatewayAddress); } /** * @notice Construct the base for all BridgeImplementations. * @param routeId routeId mapped to the routrImplementation * @param data transactionData generated with arguments of bridgeRequest (offchain or by caller) * @return returns the bytes response of the route execution (bridging, refuel or swap executions) */ function _executeRoute( uint32 routeId, bytes memory data ) internal returns (bytes memory) { (bool success, bytes memory result) = socketRoute .getRoute(routeId) .delegatecall(data); if (!success) { assembly { revert(add(result, 32), mload(result)) } } return result; } }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_socketGatewayAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BRIDGE_AFTER_SWAP_SELECTOR","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NULL_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFUEL_SWAP_BRIDGE_FUNCTION_SELECTOR","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint32","name":"refuelRouteId","type":"uint32"},{"internalType":"bytes","name":"refuelData","type":"bytes"},{"internalType":"uint32","name":"swapRouteId","type":"uint32"},{"internalType":"bytes","name":"swapData","type":"bytes"},{"internalType":"uint32","name":"bridgeRouteId","type":"uint32"},{"internalType":"bytes","name":"bridgeData","type":"bytes"}],"internalType":"struct ISocketRequest.RefuelSwapBridgeRequest","name":"rsbRequest","type":"tuple"}],"name":"refuelAndSwapAndBridge","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"socketGatewayAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"socketRoute","outputs":[{"internalType":"contract ISocketRoute","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010000ddd3a06904dfc71c6d2ffbdbb4371f2baaa16fd23b8fa5bf25454b98a200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f8291b7c7fdaa275a0b17da1a756d1fbe4d3a13d
Deployed Bytecode
0x0002000000000002001100000000000200010000000103550000006003100270000000be0030019d000000be0430019700000001002001900000001f0000c13d0000008002000039000000400020043f000000040040008c0000019e0000413d000000000201043b000000e002200270000000c60020009c000000610000a13d000000c70020009c000000700000213d000000ca0020009c0000007d0000613d000000cb0020009c0000019e0000c13d0000000001000416000000000001004b0000019e0000c13d0000000001000412000b00000001001d000a00a00000003d00000000010004150000000b0110008a000000dd0000013d0000000002000416000000000002004b0000019e0000c13d0000001f02400039000000bf022001970000014002200039000000400020043f0000001f0340018f000000c0054001980000014002500039000000300000613d0000014006000039000000000701034f000000007807043c0000000006860436000000000026004b0000002c0000c13d000000000003004b0000003d0000613d000000000151034f0000000303300210000000000502043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000120435000000200040008c0000019e0000413d000001400100043d000000c10010009c0000019e0000213d000000c202000041000000800020043f000000a00000043f000000c303000041000000c00030043f000000e00010043f000001000010043f000000c404000041000001200040043f0000014000000443000001600020044300000020020000390000018000200443000001a0000004430000004005000039000001c000500443000001e000300443000000600300003900000200003004430000022000100443000000800300003900000240003004430000026000100443000000a0010000390000028000100443000002a000400443000001000020044300000006010000390000012000100443000000c501000041000002f50001042e000000cc0020009c000000860000613d000000cd0020009c000000d50000613d000000ce0020009c0000019e0000c13d0000000001000416000000000001004b0000019e0000c13d0000000001000412000f00000001001d000e00600000003d00000000010004150000000f0110008a000000cf0000013d000000c80020009c000000c70000613d000000c90020009c0000019e0000c13d0000000001000416000000000001004b0000019e0000c13d0000000001000412000700000001001d000600000000003d0000000001000415000000070110008a000000cf0000013d0000000001000416000000000001004b0000019e0000c13d0000000001000412000d00000001001d000c00800000003d00000000010004150000000d0110008a000000cf0000013d000000240040008c0000019e0000413d0000000402100370000000000b02043b000000d100b0009c0000019e0000213d0000000002b40049000000d20020009c0000019e0000213d000000c40020008c0000019e0000413d000000040ab000390000000003a1034f000000000303043b000000be0030009c0000019e0000213d000000200ca000390000000005c1034f000000000505043b000000230220008a000000d306500197000000d307200197000000000876013f000000000076004b0000000006000019000000d306004041000000000025004b0000000002000019000000d302008041000000d30080009c000000000602c019000000000006004b0000019e0000c13d0000000005a50019000000000251034f000000000202043b000000d10020009c0000019e0000213d00000000062400490000002005500039000000d307600197000000d308500197000000000978013f000000000078004b0000000007000019000000d307004041000000000065004b0000000006000019000000d306002041000000d30090009c000000000706c019000000000007004b0000019e0000c13d0000001f06200039000000d9066001970000003f06600039000000d906600197000000d40060009c000000e30000a13d000000d701000041000000000010043f0000004101000039000000040010043f000000d801000041000002f6000104300000000001000416000000000001004b0000019e0000c13d0000000001000412000900000001001d000800200000003d0000000001000415000000090110008a000000050110021002f402d70000040f000000c101100197000000800010043f000000cf01000041000002f50001042e0000000001000416000000000001004b0000019e0000c13d0000000001000412001100000001001d001000400000003d0000000001000415000000110110008a000000050110021002f402d70000040f000000d001100197000000800010043f000000cf01000041000002f50001042e0000008006600039000000400060043f000000800020043f0000000006520019000000000046004b0000019e0000213d00030000000c001d00040000000b001d00050000000a001d000000000451034f000000d9052001980000001f0620018f000000a001500039000000f70000613d000000a007000039000000000804034f000000008908043c0000000007970436000000000017004b000000f30000c13d000000000006004b000001040000613d000000000454034f0000000305600210000000000601043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000410435000000a00120003900000000000104350000008002000039000000000103001902f402120000040f000000030100002900000020021000390000000104000367000000000124034f000000000101043b000000be0010009c000000050900002900000004030000290000019e0000213d000300200020003d0000000302400360000000000202043b00000000050000310000000003350049000000230330008a000000d306300197000000d307200197000000000867013f000000000067004b0000000006000019000000d306004041000000000032004b0000000003000019000000d303008041000000d30080009c000000000603c019000000000006004b0000019e0000c13d0000000002920019000000000324034f000000000303043b000000d10030009c0000019e0000213d00000000063500490000002007200039000000d302600197000000d308700197000000000928013f000000000028004b0000000002000019000000d302004041000000000067004b0000000006000019000000d306002041000000d30090009c000000000206c019000000000002004b0000019e0000c13d0000001f02300039000000d9022001970000003f02200039000000d906200197000000400200043d0000000006620019000000000026004b00000000080000390000000108004039000000d10060009c000000c10000213d0000000100800190000000c10000c13d000000400060043f00000000063204360000000008730019000000000058004b0000019e0000213d000000000574034f000000d9073001980000001f0830018f0000000004760019000001560000613d000000000905034f000000000a060019000000009b09043c000000000aba043600000000004a004b000001520000c13d000000000008004b000001630000613d000000000575034f0000000307800210000000000804043300000000087801cf000000000878022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000585019f00000000005404350000000003360019000000000003043502f402120000040f0000000023010434000000d20030009c000000050800002900000004040000290000019e0000213d000000400030008c0000019e0000413d00000040011000390000000001010433000000c10010009c0000019e0000213d0000000001020433000200000001001d0000000301000029000300400010003d00000001020003670000000301200360000000000301043b00000000010000310000000004410049000000230440008a000000d305400197000000d306300197000000000756013f000000000056004b0000000005000019000000d305004041000000000043004b0000000004000019000000d304008041000000d30070009c000000000504c019000000000005004b0000019e0000c13d0000000003830019000000000232034f000000000202043b000500000002001d000000d10020009c0000019e0000213d000000050110006a0000002005300039000000d302100197000000d303500197000000000423013f000000000023004b0000000002000019000000d302004041000400000005001d000000000015004b0000000001000019000000d301002041000000d30040009c000000000201c019000000000002004b000001a00000613d0000000001000019000002f600010430000000400100043d000100000001001d000000d501000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000000be0010009c000000be01008041000000c001100210000000d6011001c7000080050200003902f402ea0000040f0000000100200190000002110000613d000000000101043b000000010300002900000020023000390000000000120435000000440130003900000040020000390000000000210435000000240130003900000002020000290000000000210435000000640130003900000005020000290000000000210435000000d9042001980000001f0520018f0000008402300039000000000342001900000001010003670000000406100360000001cb0000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000001c70000c13d000000000005004b000001d80000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000503000029000000000232001900000000000204350000001f02300039000000d902200197000000640320003900000001050000290000000000350435000000a302200039000000d9022001970000000002250019000000000052004b00000000030000390000000103004039000000d10020009c000000c10000213d0000000100300190000000c10000c13d000000400020043f0000000302000029000000200220008a000000000121034f000000000101043b000000be0010009c0000019e0000213d000000010200002902f402120000040f0000002003000039000000400200043d0000000005320436000000004301043400000000003504350000004001200039000000000003004b000002030000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000001fc0000413d0000001f04300039000000d9044001970000000003310019000000000003043500000000032400490000000001130019000000be0010009c000000be010080410000006001100210000000be0020009c000000be020080410000004002200210000000000121019f000002f50001042e000000000001042f0002000000000002000100000002001d000000400300043d000000da020000410000000000230435000000be01100197000200000003001d00000004023000390000000000120435000000d501000041000000000010044300000000010004120000000400100443000000800100003900000024001004430000000001000414000000be0010009c000000be01008041000000c001100210000000d6011001c7000080050200003902f402ea0000040f0000000100200190000002ae0000613d000000000201043b0000000201000029000000be0010009c000000be0100804100000040011002100000000003000414000000be0030009c000000be03008041000000c003300210000000000113019f000000d8011001c7000000c10220019702f402ea0000040f0000006003100270000000be03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000020b00002900000000057b0019000002470000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000002430000c13d000000000006004b000002540000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000002af0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000000d10010009c000002a80000213d0000000100200190000002a80000c13d000000400010043f0000001f0030008c000002a60000a13d00000000020b0433000000c10020009c000002a60000213d00000001030000290000002001300039000000be0010009c000000be0100804100000040011002100000000003030433000000be0030009c000000be030080410000006003300210000000000113019f0000000003000414000000be0030009c000000be03008041000000c003300210000000000131019f02f402ef0000040f000000000301034f0000006001100270000000be04100198000002a10000613d0000001f01400039000000bf011001970000003f01100039000000db05100197000000400100043d0000000005510019000000000015004b00000000060000390000000106004039000000d10050009c000002a80000213d0000000100600190000002a80000c13d000000400050043f0000001f0540018f000000000a410436000000c00640019800000000046a0019000002930000613d000000000703034f00000000080a0019000000007907043c0000000008980436000000000048004b0000028f0000c13d000000000005004b000002a30000613d000000000363034f0000000305500210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000002a30000013d0000006001000039000000800a0000390000000100200190000002cd0000613d000000000001042d0000000001000019000002f600010430000000d701000041000000000010043f0000004101000039000000040010043f000000d801000041000002f600010430000000000001042f0000001f0530018f000000c006300198000000400200043d0000000004620019000002ba0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000002b60000c13d000000000005004b000002c70000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000000be0020009c000000be020080410000004002200210000000000112019f000002f600010430000000be00a0009c000000be0a0080410000004002a002100000000001010433000000be0010009c000000be010080410000006001100210000000000121019f000002f600010430000000000001042f000000d5020000410000000000200443000000050110027000000000020100310000000400200443000000010101003100000024001004430000000001000414000000be0010009c000000be01008041000000c001100210000000d6011001c7000080050200003902f402ea0000040f0000000100200190000002e90000613d000000000101043b000000000001042d000000000001042f000002ed002104230000000102000039000000000001042d0000000002000019000000000001042d000002f2002104250000000102000039000000000001042d0000000002000019000000000001042d000002f400000432000002f50001042e000002f600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb3dc8da400000000000000000000000000000000000000000000000000000000123506490000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000001c0000001000000000000000000000000000000000000000000000000000000000000000000000000007928513200000000000000000000000000000000000000000000000000000000de0ce17c00000000000000000000000000000000000000000000000000000000de0ce17d00000000000000000000000000000000000000000000000000000000df2ebdbb000000000000000000000000000000000000000000000000000000007928513300000000000000000000000000000000000000000000000000000000ab5884c000000000000000000000000000000000000000000000000000000000123506490000000000000000000000000000000000000000000000000000000052283e35000000000000000000000000000000000000000000000000000000006e929dd10000000000000000000000000000000000000020000000800000000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07095d4710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe0387479d6a49de67514e98ec119690c7a83c6fb94e78eb33da63792ca5a75240d
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8291b7c7fdaa275a0b17da1a756d1fbe4d3a13d
-----Decoded View---------------
Arg [0] : _socketGatewayAddress (address): 0xf8291B7c7fDaa275a0B17DA1a756D1fbE4d3A13d
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8291b7c7fdaa275a0b17da1a756d1fbe4d3a13d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.