Forkchoice Ethereum Mainnet

Address Contract Partially Verified

Address 0xf94e7d0710709388bCe3161C32B4eEA56d3f91CC
Balance 0.690669 ETH ($1,357.88)
Nonce 1
Code Size 10211 bytes
Indexed Transactions 0 (1 on-chain, 1.6% indexed)
External Etherscan · Sourcify

Contract Bytecode

10211 bytes
Copy Bytecode
0x6080604052600436106103035760003560e01c8063893d20e811610190578063c9567bf9116100dc578063e8b574f211610095578063f2fde38b1161006f578063f2fde38b14610951578063f84ba65d14610971578063f887ea4014610991578063f9f92be4146109b157600080fd5b8063e8b574f2146108e4578063e96fada214610911578063f1f3bca31461093157600080fd5b8063c9567bf91461081e578063d00efb2f14610833578063d088935814610849578063d58d850c14610869578063d912b2ce14610889578063dd62ed3e1461089e57600080fd5b8063a845bd8611610149578063abe57e7011610123578063abe57e70146107a4578063bafe446b146107c4578063bb2188b4146107d9578063bfa21d6a146107f957600080fd5b8063a845bd861461074e578063a8aa1b3114610764578063a9059cbb1461078457600080fd5b8063893d20e8146106605780638b42507f146106925780638da5cb5b146106c257806395d89b41146106e05780639fdc80051461070e578063a4b45c001461072e57600080fd5b8063492a937b1161024f578063658d4b7f116102085780636ddd1713116101e25780636ddd1713146105dc57806370a08231146105fb578063715018a6146106315780638124f7ac1461064657600080fd5b8063658d4b7f1461058657806365cf7c9b146105a657806367243482146105bc57600080fd5b8063492a937b146104c157806350713935146104e157806356a227f21461050157806360bba03d1461052157806360eef7411461054157806363a803e11461057157600080fd5b8063188d1644116102bc5780632b112e49116102965780632b112e4914610440578063313ce56714610455578063332402f8146104715780633f4218e01461049157600080fd5b8063188d1644146103f5578063234e94941461040b57806323b872dd1461042057600080fd5b80630445b6671461030f57806304a66b481461033857806306fdde031461035a578063095ea7b31461039a578063178a18ce146103ca57806318160ddd146103e057600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032560205481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b5061035861035336600461217b565b6109de565b005b34801561036657600080fd5b5060408051808201909152600e81526d446573747261204e6574776f726b60901b60208201525b60405161032f91906121b6565b3480156103a657600080fd5b506103ba6103b5366004612219565b610b0c565b604051901515815260200161032f565b3480156103d657600080fd5b50610325600a5481565b3480156103ec57600080fd5b50600354610325565b34801561040157600080fd5b50610325601c5481565b34801561041757600080fd5b50610325610b79565b34801561042c57600080fd5b506103ba61043b366004612245565b610b99565b34801561044c57600080fd5b50610325610c2e565b34801561046157600080fd5b506040516012815260200161032f565b34801561047d57600080fd5b506103ba61048c366004612286565b610c6f565b34801561049d57600080fd5b506103ba6104ac3660046122bf565b600b6020526000908152604090205460ff1681565b3480156104cd57600080fd5b506103586104dc3660046122f1565b610d16565b3480156104ed57600080fd5b506103586104fc366004612326565b610db2565b34801561050d57600080fd5b5061035861051c366004612352565b610e2b565b34801561052d57600080fd5b5061035861053c3660046122f1565b610f31565b34801561054d57600080fd5b506103ba61055c3660046122bf565b600d6020526000908152604090205460ff1681565b34801561057d57600080fd5b50610325610f64565b34801561059257600080fd5b506103586105a13660046122f1565b610f7f565b3480156105b257600080fd5b50610325601e5481565b3480156105c857600080fd5b506103586105d73660046123c3565b610fb2565b3480156105e857600080fd5b50601f546103ba90610100900460ff1681565b34801561060757600080fd5b506103256106163660046122bf565b6001600160a01b031660009081526007602052604090205490565b34801561063d57600080fd5b506103586110f7565b34801561065257600080fd5b506015546103ba9060ff1681565b34801561066c57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161032f565b34801561069e57600080fd5b506103ba6106ad3660046122bf565b600c6020526000908152604090205460ff1681565b3480156106ce57600080fd5b506000546001600160a01b031661067a565b3480156106ec57600080fd5b506040805180820190915260058152644453796e6360d81b602082015261038d565b34801561071a57600080fd5b506103ba6107293660046122bf565b61110b565b34801561073a57600080fd5b50610358610749366004612286565b611119565b34801561075a57600080fd5b5061032560215481565b34801561077057600080fd5b50601a5461067a906001600160a01b031681565b34801561079057600080fd5b506103ba61079f366004612219565b611159565b3480156107b057600080fd5b506103586107bf36600461242f565b611166565b3480156107d057600080fd5b506103256111b5565b3480156107e557600080fd5b506103586107f4366004612451565b6111d0565b34801561080557600080fd5b5060155461067a9061010090046001600160a01b031681565b34801561082a57600080fd5b50610358611377565b34801561083f57600080fd5b50610325601d5481565b34801561085557600080fd5b506103586108643660046124a5565b611417565b34801561087557600080fd5b506103586108843660046124d8565b61146e565b34801561089557600080fd5b5061035861147b565b3480156108aa57600080fd5b506103256108b9366004612286565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108f057600080fd5b506103256108ff3660046124d8565b60096020526000908152604090205481565b34801561091d57600080fd5b5060165461067a906001600160a01b031681565b34801561093d57600080fd5b5061032561094c3660046124f1565b611497565b34801561095d57600080fd5b5061035861096c3660046122bf565b6114af565b34801561097d57600080fd5b5061035861098c3660046122f1565b611528565b34801561099d57600080fd5b5060175461067a906001600160a01b031681565b3480156109bd57600080fd5b506103256109cc3660046122bf565b601b6020526000908152604090205481565b6109e661155b565b6109f08486612522565b60026109fc8688612522565b610a069190612535565b610a11906002612557565b14610a8b576040805162461bcd60e51b81526020600482015260248101919091527f4c697175696469747920666565206d75737420626520616e206576656e206e7560448201527f6d62657220666f7220726f756e64696e6720636f6d7061746962696c6974792e60648201526084015b60405180910390fd5b60108590556011849055600e839055600f829055610aa98386612522565b601255610ab68285612522565b601381905560148290556012546040805191825260208201929092529081018290527f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459060600160405180910390a15050505050565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b679086815260200190565b60405180910390a35060015b92915050565b6000610b876012600a612652565b600554610b949190612535565b905090565b6001600160a01b038316600090815260086020908152604080832033845290915281205460001914610c19576001600160a01b0384166000908152600860209081526040808320338452909152902054610bf4908390612661565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b610c248484846115b5565b90505b9392505050565b6002546001600160a01b039081166000908152600760205260408082205460015490931682528120549091610c6291612522565b600354610b949190612661565b60155460009060ff16158015610c9e57506001600160a01b03821660009081526019602052604090205460ff16155b8015610cc357506001600160a01b03831660009081526019602052604090205460ff16155b15610cd057506000610b73565b6001600160a01b0383166000908152600b602052604090205460ff16158015610c275750506001600160a01b03166000908152600b602052604090205460ff1615919050565b610d1e61155b565b601a546001600160a01b0390811690831603610d875760405162461bcd60e51b815260206004820152602260248201527f43616e277420616c7465722063757272656e74206c697175696469747920706160448201526134b960f11b6064820152608401610a82565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b610dba61155b565b600083118015610dca5750600082115b8015610dd65750600081115b8015610de457506127108111155b610ded57600080fd5b8083600354610dfc9190612557565b610e069190612535565b6004556003548190610e19908490612557565b610e239190612535565b600555505050565b3360009081526023602052604090205460ff1680610e5357506000546001600160a01b031633145b610e6f5760405162461bcd60e51b8152600401610a8290612674565b478015610f2c5760006001600160a01b0383166064610e8e8685612557565b610e989190612535565b604051600081818185875af1925050503d8060008114610ed4576040519150601f19603f3d011682016040523d82523d6000602084013e610ed9565b606091505b5050905080610f2a5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207472616e736665722066756e647300000000000000006044820152606401610a82565b505b505050565b610f3961155b565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000610f726012600a612652565b600654610b949190612535565b610f8761155b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610fba61155b565b8215801590610fc857508083145b610fd157600080fd5b3360005b848110156110ef5760196000878784818110610ff357610ff36126ab565b905060200201602081019061100891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff161580156110775750600d6000878784818110611043576110436126ab565b905060200201602081019061105891906122bf565b6001600160a01b0316815260208101919091526040016000205460ff16155b156110dd576110db82878784818110611092576110926126ab565b90506020020160208101906110a791906122bf565b6110b36012600a612652565b8787868181106110c5576110c56126ab565b905060200201356110d69190612557565b6119cf565b505b806110e7816126c1565b915050610fd5565b505050505050565b6110ff61155b565b6111096000611a89565b565b6000610b7382600019610b0c565b61112161155b565b60158054610100600160a81b0319166101006001600160a01b0394851602179055601680546001600160a01b03191691909216179055565b6000610c273384846115b5565b61116e61155b565b60008211801561117e5750600081115b801561118c57506127108111155b61119557600080fd5b80826003546111a49190612557565b6111ae9190612535565b6006555050565b60006111c36012600a612652565b600454610b949190612535565b3360009081526023602052604090205460ff16806111f857506000546001600160a01b031633145b6112145760405162461bcd60e51b8152600401610a8290612674565b60005b82811015610f2a5781156112b257601c8054906000611235836126c1565b91905055507f80e51449b76c50e375a3b72e31ca76d6ed586f0a7ff8fa6f310da7dbbcc338633285858481811061126e5761126e6126ab565b905060200201602081019061128391906122bf565b604080516001600160a01b039384168152929091166020830152439082015260600160405180910390a1611312565b601b60008585848181106112c8576112c86126ab565b90506020020160208101906112dd91906122bf565b6001600160a01b031681526020810191909152604001600020541561131257601c805490600061130c836126da565b91905055505b8161131e576000611320565b435b601b6000868685818110611336576113366126ab565b905060200201602081019061134b91906122bf565b6001600160a01b031681526020810191909152604001600020558061136f816126c1565b915050611217565b3360009081526023602052604090205460ff168061139f57506000546001600160a01b031633145b6113bb5760405162461bcd60e51b8152600401610a8290612674565b601f5460ff16156114065760405162461bcd60e51b815260206004820152601560248201527443616e27742072652d6f70656e2074726164696e6760581b6044820152606401610a82565b601f805461ffff1916610101179055565b61141f61155b565b6000821161142c57600080fd5b601f805461ff0019166101008515150217905560035461144d908390612535565b60205561145c6012600a612652565b6114669082612557565b602155505050565b61147661155b565b600a55565b61148361155b565b6015805460ff19811660ff90911615179055565b600081156114a757505060135490565b505060125490565b6114b761155b565b6001600160a01b03811661151c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a82565b61152581611a89565b50565b61153061155b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146111095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a82565b60006001600160a01b03841661160d5760405162461bcd60e51b815260206004820152601860248201527f45524332303a207472616e736665722066726f6d2030783000000000000000006044820152606401610a82565b6001600160a01b03831661165c5760405162461bcd60e51b8152602060048201526016602482015275045524332303a207472616e7366657220746f203078360541b6044820152606401610a82565b600082116116a45760405162461bcd60e51b8152602060048201526015602482015274416d6f756e74206d757374206265203e207a65726f60581b6044820152606401610a82565b6001600160a01b0384166000908152600760205260409020548211156117035760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a82565b601d5415801561172b57506001600160a01b03831660009081526019602052604090205460ff165b156117a5576001600160a01b0384166000908152600d602052604090205460ff166117985760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206e6f74206164646564207965742e00000000000000006044820152606401610a82565b6117a543601d5542601e55565b601f5460ff1661183a576001600160a01b0384166000908152600d602052604090205460ff16806117ee57506001600160a01b0383166000908152600d602052604090205460ff165b61183a5760405162461bcd60e51b815260206004820152601c60248201527f54726164696e67206973206e6f74206c61756e63686564207965742e000000006044820152606401610a82565b611845848484611ad9565b6001600160a01b03831660009081526019602052604090205460ff1615801561187c57506001546001600160a01b03848116911614155b156118ab576001600160a01b0383166000908152600c602052604090205460ff166118ab576118ab8383611bf9565b60225460ff16156118c8576118c18484846119cf565b9050610c27565b6001600160a01b0384166000908152600760205260409020546118ec908390612661565b6001600160a01b038516600090815260076020526040902055816119108585610c6f565b156119445761191f8484611c7c565b905061192a84611cfa565b80156119365750600083115b156119445761194483611dad565b6001600160a01b038416600090815260076020526040902054611968908290612522565b6001600160a01b0380861660008181526007602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119bc9085815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166000908152600760205260408120546119f3908390612661565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611a23908390612522565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a779086815260200190565b60405180910390a35060019392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600c602052604090205460ff1680611b1857506001600160a01b0382166000908152600c602052604090205460ff165b15611b2257505050565b6001600160a01b03831660009081526019602052604090205460ff16611b4a57600554611b4e565b6004545b811115611b9d5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206578636565647320746865207478206c696d69742e000000006044820152606401610a82565b6001600160a01b0383166000908152601b602052604090205415610f2c5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420626c61636b6c69737465642160681b6044820152606401610a82565b6006546001600160a01b0383166000908152600760205260409020548190611c22908490612522565b1115610f2c5760405162461bcd60e51b815260206004820152602360248201527f416d6f756e74206578636565647320746865206d61782077616c6c65742073696044820152623d329760e91b6064820152608401610a82565b6001600160a01b03821660009081526019602052604081205460145460ff909116908290611ca983611497565b611cb39086612557565b611cbd9190612535565b30600090815260076020526040812080549293508392909190611ce1908490612522565b90915550611cf190508185612661565b95945050505050565b3360009081526019602052604081205460ff16158015611d1d575060225460ff16155b8015611d305750601f54610100900460ff165b8015611d4c5750600a5443600090815260096020526040902054105b8015611d7057506001600160a01b03821660009081526019602052604090205460ff165b8015611d8d57506021543060009081526007602052604090205410155b8015610b7357506000601354601254611da69190612522565b1192915050565b6022805460ff19166001179055601354601254600091611dcc91612522565b905060006020548310611de157602054611de3565b825b30600090815260076020526040902054909150811115611e0f5750306000908152600760205260409020545b6000601154601054611e219190612522565b90506000836002611e328486612557565b611e3c9190612535565b611e469190612535565b9050611e528184612661565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110611e8c57611e8c6126ab565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0991906126f1565b81600181518110611f1c57611f1c6126ab565b6001600160a01b03928316602091820292909201015260175460405163791ac94760e01b81524792919091169063791ac94790611f6690889060009087903090429060040161270e565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b5050505060008147611fa69190612661565b90506000611fb5600287612535565b611fbf9089612661565b90506000816002611fd08986612557565b611fda9190612535565b611fe49190612535565b90506000611ff28285612661565b90508015612051576016546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612047576040519150601f19603f3d011682016040523d82523d6000602084013e61204c565b606091505b505050505b86156120f55760175460155460405163f305d71960e01b8152306004820152602481018a905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990849060c40160606040518083038185885af11580156120cc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120f1919061277f565b5050505b43600090815260096020526040902054612110906001612522565b4360009081526009602090815260409182902092909255805183815291820184905281018890527fdaf6233a382145376035341e71f8a04305f7e323d0fe3e58c908cf0a26b76df99060600160405180910390a150506022805460ff19169055505050505050505050565b600080600080600060a0868803121561219357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156121e3578581018301518582016040015282016121c7565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461152557600080fd5b6000806040838503121561222c57600080fd5b823561223781612204565b946020939093013593505050565b60008060006060848603121561225a57600080fd5b833561226581612204565b9250602084013561227581612204565b929592945050506040919091013590565b6000806040838503121561229957600080fd5b82356122a481612204565b915060208301356122b481612204565b809150509250929050565b6000602082840312156122d157600080fd5b8135610c2781612204565b803580151581146122ec57600080fd5b919050565b6000806040838503121561230457600080fd5b823561230f81612204565b915061231d602084016122dc565b90509250929050565b60008060006060848603121561233b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561236557600080fd5b8235915060208301356122b481612204565b60008083601f84011261238957600080fd5b50813567ffffffffffffffff8111156123a157600080fd5b6020830191508360208260051b85010111156123bc57600080fd5b9250929050565b600080600080604085870312156123d957600080fd5b843567ffffffffffffffff808211156123f157600080fd5b6123fd88838901612377565b9096509450602087013591508082111561241657600080fd5b5061242387828801612377565b95989497509550505050565b6000806040838503121561244257600080fd5b50508035926020909101359150565b60008060006040848603121561246657600080fd5b833567ffffffffffffffff81111561247d57600080fd5b61248986828701612377565b909450925061249c9050602085016122dc565b90509250925092565b6000806000606084860312156124ba57600080fd5b6124c3846122dc565b95602085013595506040909401359392505050565b6000602082840312156124ea57600080fd5b5035919050565b60006020828403121561250357600080fd5b610c27826122dc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b7357610b7361250c565b60008261255257634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610b7357610b7361250c565b600181815b808511156125a957816000190482111561258f5761258f61250c565b8085161561259c57918102915b93841c9390800290612573565b509250929050565b6000826125c057506001610b73565b816125cd57506000610b73565b81600181146125e357600281146125ed57612609565b6001915050610b73565b60ff8411156125fe576125fe61250c565b50506001821b610b73565b5060208310610133831016604e8410600b841016171561262c575081810a610b73565b612636838361256e565b806000190482111561264a5761264a61250c565b029392505050565b6000610c2760ff8416836125b1565b81810381811115610b7357610b7361250c565b6020808252601b908201527f43616c6c6572206973206e6f742061207465616d206d656d6265720000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600182016126d3576126d361250c565b5060010190565b6000816126e9576126e961250c565b506000190190565b60006020828403121561270357600080fd5b8151610c2781612204565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561275e5784516001600160a01b031683529383019391830191600101612739565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561279457600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122022b94021eab2175421fad102ac836f5e7d71d53e10ad6828e6dc296941b6d21364736f6c63430008110033

Verified Source Code Partial Match

Compiler: v0.8.17+commit.8df45f5f EVM: london Optimization: Yes (200 runs)
DestraNetwork.sol 769 lines
/** 
Website: https://destra.network
Telegram: https://t.me/DestraNetwork
Twitter: https://x.com/destranetwork
**/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library Address {
  function isContract(address account) internal view returns (bool) {
    return account.code.length > 0;
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    (bool success, ) = recipient.call{value: amount}("");
    require(
      success,
      "Address: unable to send value, recipient may have reverted"
    );
  }

  function functionCall(
    address target,
    bytes memory data
  ) internal returns (bytes memory) {
    return
      functionCallWithValue(target, data, 0, "Address: low-level call failed");
  }

  function functionCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    return functionCallWithValue(target, data, 0, errorMessage);
  }

  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value
  ) internal returns (bytes memory) {
    return
      functionCallWithValue(
        target,
        data,
        value,
        "Address: low-level call with value failed"
      );
  }

  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value,
    string memory errorMessage
  ) internal returns (bytes memory) {
    require(
      address(this).balance >= value,
      "Address: insufficient balance for call"
    );
    (bool success, bytes memory returndata) = target.call{value: value}(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionStaticCall(
    address target,
    bytes memory data
  ) internal view returns (bytes memory) {
    return
      functionStaticCall(target, data, "Address: low-level static call failed");
  }

  function functionStaticCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    (bool success, bytes memory returndata) = target.staticcall(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function functionDelegateCall(
    address target,
    bytes memory data
  ) internal returns (bytes memory) {
    return
      functionDelegateCall(
        target,
        data,
        "Address: low-level delegate call failed"
      );
  }

  function functionDelegateCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    (bool success, bytes memory returndata) = target.delegatecall(data);
    return
      verifyCallResultFromTarget(target, success, returndata, errorMessage);
  }

  function verifyCallResultFromTarget(
    address target,
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal view returns (bytes memory) {
    if (success) {
      if (returndata.length == 0) {
        // only check isContract if the call was successful and the return data is empty
        // otherwise we already know that it was a contract
        require(isContract(target), "Address: call to non-contract");
      }
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function verifyCallResult(
    bool success,
    bytes memory returndata,
    string memory errorMessage
  ) internal pure returns (bytes memory) {
    if (success) {
      return returndata;
    } else {
      _revert(returndata, errorMessage);
    }
  }

  function _revert(
    bytes memory returndata,
    string memory errorMessage
  ) private pure {
    // Look for revert reason and bubble it up if present
    if (returndata.length > 0) {
      // The easiest way to bubble the revert reason is using memory via assembly
      /// @solidity memory-safe-assembly
      assembly {
        let returndata_size := mload(returndata)
        revert(add(32, returndata), returndata_size)
      }
    } else {
      revert(errorMessage);
    }
  }
}

abstract contract Context {
  function _msgSender() internal view virtual returns (address) {
    return msg.sender;
  }

  function _msgData() internal view virtual returns (bytes calldata) {
    return msg.data;
  }
}

interface IERC20 {
  function totalSupply() external view returns (uint256);

  function balanceOf(address account) external view returns (uint256);

  function transfer(address recipient, uint256 amount) external returns (bool);

  function allowance(
    address owner,
    address spender
  ) external view returns (uint256);

  function approve(address spender, uint256 amount) external returns (bool);

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external returns (bool);

  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDEXFactory {
  function createPair(
    address tokenA,
    address tokenB
  ) external returns (address pair);
}

interface IDEXRouter {
  function factory() external pure returns (address);

  function WETH() external pure returns (address);

  function addLiquidityETH(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
  ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
  ) external;
}

abstract contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  constructor() {
    _transferOwnership(_msgSender());
  }

  modifier onlyOwner() {
    _checkOwner();
    _;
  }

  function owner() public view virtual returns (address) {
    return _owner;
  }

  function _checkOwner() internal view virtual {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
  }

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
    address oldOwner = _owner;
    _owner = newOwner;
    emit OwnershipTransferred(oldOwner, newOwner);
  }
}

contract DestraNetwork is IERC20, Ownable {
  using Address for address;

  address DEAD = 0x000000000000000000000000000000000000dEaD;
  address ZERO = 0x0000000000000000000000000000000000000000;

  string constant _name = "Destra Network";
  string constant _symbol = "DSync";
  uint8 constant _decimals = 18;

  uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
  uint256 _maxBuyTxAmount = (_totalSupply * 1) / 100;
  uint256 _maxSellTxAmount = (_totalSupply * 1) / 100;
  uint256 _maxWalletSize = (_totalSupply * 1) / 100;

  mapping(address => uint256) _balances;
  mapping(address => mapping(address => uint256)) _allowances;

  mapping(uint256 => uint256) public swapBackCounter;
  uint256 public swapBackRateLimit = 3;

  mapping(address => bool) public isFeeExempt;
  mapping(address => bool) public isTxLimitExempt;
  mapping(address => bool) public isLiquidityCreator;

  uint256 marketingBuyFee = 500;
  uint256 marketingSellFee = 6000;
  uint256 liquidityBuyFee = 0;
  uint256 liquiditySellFee = 0;
  uint256 totalBuyFee = marketingBuyFee + liquidityBuyFee;
  uint256 totalSellFee = marketingSellFee + liquiditySellFee;
  uint256 feeDenominator = 10000;

  bool public transferTax = false;

  address payable public liquidityFeeReceiver = payable(0xa75bFFD82FFE8A5064A5b6122448221aCEbCf950);
  address payable public marketingFeeReceiver = payable(0xa75bFFD82FFE8A5064A5b6122448221aCEbCf950);

  IDEXRouter public router;
  address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
  mapping(address => bool) liquidityPools;
  address public pair;

  mapping(address => uint256) public blacklist;
  uint256 public blacklistCount;

  uint256 public launchBlock;
  uint256 public launchTimestamp;
  bool isTradingEnabled = false;

  bool public swapEnabled = false;
  uint256 public swapThreshold = _totalSupply / 1000;
  uint256 public swapAtMinimum = _totalSupply / 10000;
  bool inSwap;

  modifier swapping() {
    inSwap = true;
    _;
    inSwap = false;
  }

  mapping(address => bool) teamMembers;

  modifier onlyTeam() {
    require(
      teamMembers[_msgSender()] || msg.sender == owner(),
      "Caller is not a team member"
    );
    _;
  }

  event WalletBlacklisted(address, address, uint256);

  constructor() {
    router = IDEXRouter(routerAddress);
    pair = IDEXFactory(router.factory()).createPair(
      router.WETH(),
      address(this)
    );
    liquidityPools[pair] = true;
    _allowances[owner()][routerAddress] = type(uint256).max;
    _allowances[address(this)][routerAddress] = type(uint256).max;

    isFeeExempt[owner()] = true;
    isLiquidityCreator[owner()] = true;

    isTxLimitExempt[address(this)] = true;
    isTxLimitExempt[owner()] = true;
    isTxLimitExempt[routerAddress] = true;
    isTxLimitExempt[DEAD] = true;

    _balances[owner()] = _totalSupply;

    emit Transfer(address(0), owner(), _totalSupply);
  }

  receive() external payable {}

  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

  function decimals() external pure returns (uint8) {
    return _decimals;
  }

  function symbol() external pure returns (string memory) {
    return _symbol;
  }

  function name() external pure returns (string memory) {
    return _name;
  }

  function getOwner() external view returns (address) {
    return owner();
  }

  function maxBuyTxTokens() external view returns (uint256) {
    return _maxBuyTxAmount / (10 ** _decimals);
  }

  function maxSellTxTokens() external view returns (uint256) {
    return _maxSellTxAmount / (10 ** _decimals);
  }

  function maxWalletTokens() external view returns (uint256) {
    return _maxWalletSize / (10 ** _decimals);
  }

  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account];
  }

  function allowance(
    address holder,
    address spender
  ) external view override returns (uint256) {
    return _allowances[holder][spender];
  }

  function approve(
    address spender,
    uint256 amount
  ) public override returns (bool) {
    _allowances[msg.sender][spender] = amount;
    emit Approval(msg.sender, spender, amount);
    return true;
  }

  function approveMaxAmount(address spender) external returns (bool) {
    return approve(spender, type(uint256).max);
  }

  function setTeamMember(address _team, bool _enabled) external onlyOwner {
    teamMembers[_team] = _enabled;
  }

  function airdrop(
    address[] calldata addresses,
    uint256[] calldata amounts
  ) external onlyOwner {
    require(addresses.length > 0 && amounts.length == addresses.length);
    address from = msg.sender;

    for (uint i = 0; i < addresses.length; i++) {
      if (!liquidityPools[addresses[i]] && !isLiquidityCreator[addresses[i]]) {
        _basicTransfer(from, addresses[i], amounts[i] * (10 ** _decimals));
      }
    }
  }

  function clearStuckBalance(
    uint256 amountPercentage,
    address adr
  ) external onlyTeam {
    uint256 amountETH = address(this).balance;

    if (amountETH > 0) {
      (bool sent, ) = adr.call{value: (amountETH * amountPercentage) / 100}("");
      require(sent, "Failed to transfer funds");
    }
  }

  function blacklistWallets(
    address[] calldata _wallets,
    bool _blacklist
  ) external onlyTeam {
    for (uint i = 0; i < _wallets.length; i++) {
      if (_blacklist) {
        blacklistCount++;
        emit WalletBlacklisted(tx.origin, _wallets[i], block.number);
      } else {
        if (blacklist[_wallets[i]] != 0) blacklistCount--;
      }
      blacklist[_wallets[i]] = _blacklist ? block.number : 0;
    }
  }

  function transfer(
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    return _transferFrom(msg.sender, recipient, amount);
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) external override returns (bool) {
    if (_allowances[sender][msg.sender] != type(uint256).max) {
      _allowances[sender][msg.sender] =
        _allowances[sender][msg.sender] -
        amount;
    }

    return _transferFrom(sender, recipient, amount);
  }

  function _transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) internal returns (bool) {
    require(sender != address(0), "ERC20: transfer from 0x0");
    require(recipient != address(0), "ERC20: transfer to 0x0");
    require(amount > 0, "Amount must be > zero");
    require(_balances[sender] >= amount, "Insufficient balance");
    if (!launched() && liquidityPools[recipient]) {
      require(isLiquidityCreator[sender], "Liquidity not added yet.");
      launch();
    }
    if (!isTradingEnabled) {
      require(
        isLiquidityCreator[sender] || isLiquidityCreator[recipient],
        "Trading is not launched yet."
      );
    }

    checkTxLimit(sender, recipient, amount);

    if (!liquidityPools[recipient] && recipient != DEAD) {
      if (!isTxLimitExempt[recipient]) {
        checkWalletLimit(recipient, amount);
      }
    }

    if (inSwap) {
      return _basicTransfer(sender, recipient, amount);
    }

    _balances[sender] = _balances[sender] - amount;

    uint256 amountReceived = amount;

    if (shouldTakeFee(sender, recipient)) {
      amountReceived = takeFee(recipient, amount);
      if (shouldSwapBack(recipient) && amount > 0) swapBack(amount);
    }

    _balances[recipient] = _balances[recipient] + amountReceived;

    emit Transfer(sender, recipient, amountReceived);
    return true;
  }

  function launched() internal view returns (bool) {
    return launchBlock != 0;
  }

  function launch() internal {
    launchBlock = block.number;
    launchTimestamp = block.timestamp;
  }

  function openTrading() external onlyTeam {
    require(!isTradingEnabled, "Can't re-open trading");
    isTradingEnabled = true;
    swapEnabled = true;
  }

  function _basicTransfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal returns (bool) {
    _balances[sender] = _balances[sender] - amount;
    _balances[recipient] = _balances[recipient] + amount;
    emit Transfer(sender, recipient, amount);
    return true;
  }

  function checkWalletLimit(address recipient, uint256 amount) internal view {
    uint256 walletLimit = _maxWalletSize;
    require(
      _balances[recipient] + amount <= walletLimit,
      "Amount exceeds the max wallet size."
    );
  }

  function checkTxLimit(
    address sender,
    address recipient,
    uint256 amount
  ) internal view {
    if (isTxLimitExempt[sender] || isTxLimitExempt[recipient]) return;

    require(
      amount <= (liquidityPools[sender] ? _maxBuyTxAmount : _maxSellTxAmount),
      "Amount exceeds the tx limit."
    );

    require(blacklist[sender] == 0, "Wallet blacklisted!");
  }

  function shouldTakeFee(
    address sender,
    address recipient
  ) public view returns (bool) {
    if (!transferTax && !liquidityPools[recipient] && !liquidityPools[sender])
      return false;
    return !isFeeExempt[sender] && !isFeeExempt[recipient];
  }

  function getTotalFee(bool selling) public view returns (uint256) {
    if (selling) return totalSellFee;
    return totalBuyFee;
  }

  function takeFee(
    address recipient,
    uint256 amount
  ) internal returns (uint256) {
    bool selling = liquidityPools[recipient];
    uint256 feeAmount = (amount * getTotalFee(selling)) / feeDenominator;

    _balances[address(this)] += feeAmount;

    return amount - feeAmount;
  }

  function shouldSwapBack(address recipient) internal view returns (bool) {
    return
      !liquidityPools[msg.sender] &&
      !inSwap &&
      swapEnabled &&
      swapBackCounter[block.number] < swapBackRateLimit &&
      liquidityPools[recipient] &&
      _balances[address(this)] >= swapAtMinimum &&
      totalBuyFee + totalSellFee > 0;
  }

  function swapBack(uint256 amount) internal swapping {
    uint256 totalFee = totalBuyFee + totalSellFee;
    uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
    if (_balances[address(this)] < amountToSwap)
      amountToSwap = _balances[address(this)];

    uint256 totalLiquidityFee = liquidityBuyFee + liquiditySellFee;
    uint256 amountToLiquify = ((amountToSwap * totalLiquidityFee) / 2) /
      totalFee;
    amountToSwap -= amountToLiquify;

    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = router.WETH();

    uint256 balanceBefore = address(this).balance;

    router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      amountToSwap,
      0,
      path,
      address(this),
      block.timestamp
    );

    uint256 amountETH = address(this).balance - balanceBefore;
    uint256 totalETHFee = totalFee - (totalLiquidityFee / 2);

    uint256 amountETHLiquidity = ((amountETH * totalLiquidityFee) / 2) /
      totalETHFee;
    uint256 amountETHMarketing = amountETH - amountETHLiquidity;

    if (amountETHMarketing > 0) {
      (bool sentMarketing, ) = marketingFeeReceiver.call{
        value: amountETHMarketing
      }("");
      if (!sentMarketing) {
        //Failed to transfer to marketing wallet
      }
    }

    if (amountToLiquify > 0) {
      router.addLiquidityETH{value: amountETHLiquidity}(
        address(this),
        amountToLiquify,
        0,
        0,
        liquidityFeeReceiver,
        block.timestamp
      );
    }
    swapBackCounter[block.number] = swapBackCounter[block.number] + 1;
    emit FundsDistributed(
      amountETHMarketing,
      amountETHLiquidity,
      amountToLiquify
    );
  }

  function addLiquidityPool(address lp, bool isPool) external onlyOwner {
    require(lp != pair, "Can't alter current liquidity pair");
    liquidityPools[lp] = isPool;
  }

  function setSwapBackRateLimit(uint256 rate) external onlyOwner {
    swapBackRateLimit = rate;
  }

  function setTxLimit(
    uint256 buyNumerator,
    uint256 sellNumerator,
    uint256 divisor
  ) external onlyOwner {
    require(
      buyNumerator > 0 && sellNumerator > 0 && divisor > 0 && divisor <= 10000
    );
    _maxBuyTxAmount = (_totalSupply * buyNumerator) / divisor;
    _maxSellTxAmount = (_totalSupply * sellNumerator) / divisor;
  }

  function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner {
    require(numerator > 0 && divisor > 0 && divisor <= 10000);
    _maxWalletSize = (_totalSupply * numerator) / divisor;
  }

  function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
    isFeeExempt[holder] = exempt;
  }

  function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
    isTxLimitExempt[holder] = exempt;
  }

  function setFees(
    uint256 _liquidityBuyFee,
    uint256 _liquiditySellFee,
    uint256 _marketingBuyFee,
    uint256 _marketingSellFee,
    uint256 _feeDenominator
  ) external onlyOwner {
    require(
      ((_liquidityBuyFee + _liquiditySellFee) / 2) * 2 ==
        (_liquidityBuyFee + _liquiditySellFee),
      "Liquidity fee must be an even number for rounding compatibility."
    );
    liquidityBuyFee = _liquidityBuyFee;
    liquiditySellFee = _liquiditySellFee;
    marketingBuyFee = _marketingBuyFee;
    marketingSellFee = _marketingSellFee;
    totalBuyFee = _liquidityBuyFee + _marketingBuyFee;
    totalSellFee = _liquiditySellFee + _marketingSellFee;
    feeDenominator = _feeDenominator;
    emit FeesSet(totalBuyFee, totalSellFee, feeDenominator);
  }

  function toggleTransferTax() external onlyOwner {
    transferTax = !transferTax;
  }

  function setFeeReceivers(
    address _liquidityFeeReceiver,
    address _marketingFeeReceiver
  ) external onlyOwner {
    liquidityFeeReceiver = payable(_liquidityFeeReceiver);
    marketingFeeReceiver = payable(_marketingFeeReceiver);
  }

  function setSwapBackSettings(
    bool _enabled,
    uint256 _denominator,
    uint256 _swapAtMinimum
  ) external onlyOwner {
    require(_denominator > 0);
    swapEnabled = _enabled;
    swapThreshold = _totalSupply / _denominator;
    swapAtMinimum = _swapAtMinimum * (10 ** _decimals);
  }

  function getCirculatingSupply() public view returns (uint256) {
    return _totalSupply - (balanceOf(DEAD) + balanceOf(ZERO));
  }

  event FundsDistributed(
    uint256 marketingETH,
    uint256 liquidityETH,
    uint256 liquidityTokens
  );
  event FeesSet(
    uint256 totalBuyFees,
    uint256 totalSellFees,
    uint256 denominator
  );
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
blacklist 0xf9f92be4 → uint256
blacklistCount 0x188d1644 → uint256
decimals 0x313ce567 → uint8
getCirculatingSupply 0x2b112e49 → uint256
getOwner 0x893d20e8 → address
getTotalFee 0xf1f3bca3 → uint256
isFeeExempt 0x3f4218e0 → bool
isLiquidityCreator 0x60eef741 → bool
isTxLimitExempt 0x8b42507f → bool
launchBlock 0xd00efb2f → uint256
launchTimestamp 0x65cf7c9b → uint256
liquidityFeeReceiver 0xbfa21d6a → address
marketingFeeReceiver 0xe96fada2 → address
maxBuyTxTokens 0xbafe446b → uint256
maxSellTxTokens 0x234e9494 → uint256
maxWalletTokens 0x63a803e1 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
router 0xf887ea40 → address
shouldTakeFee 0x332402f8 → bool
swapAtMinimum 0xa845bd86 → uint256
swapBackCounter 0xe8b574f2 → uint256
swapBackRateLimit 0x178a18ce → uint256
swapEnabled 0x6ddd1713 → bool
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
transferTax 0x8124f7ac → bool

Write Contract 21 functions

These functions modify contract state and require a wallet transaction to execute.

addLiquidityPool 0x492a937b
address lp
bool isPool
airdrop 0x67243482
address[] addresses
uint256[] amounts
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
approveMaxAmount 0x9fdc8005
address spender
returns: bool
blacklistWallets 0xbb2188b4
address[] _wallets
bool _blacklist
clearStuckBalance 0x56a227f2
uint256 amountPercentage
address adr
openTrading 0xc9567bf9
No parameters
renounceOwnership 0x715018a6
No parameters
setFeeReceivers 0xa4b45c00
address _liquidityFeeReceiver
address _marketingFeeReceiver
setFees 0x04a66b48
uint256 _liquidityBuyFee
uint256 _liquiditySellFee
uint256 _marketingBuyFee
uint256 _marketingSellFee
uint256 _feeDenominator
setIsFeeExempt 0x658d4b7f
address holder
bool exempt
setIsTxLimitExempt 0xf84ba65d
address holder
bool exempt
setMaxWallet 0xabe57e70
uint256 numerator
uint256 divisor
setSwapBackRateLimit 0xd58d850c
uint256 rate
setSwapBackSettings 0xd0889358
bool _enabled
uint256 _denominator
uint256 _swapAtMinimum
setTeamMember 0x60bba03d
address _team
bool _enabled
setTxLimit 0x50713935
uint256 buyNumerator
uint256 sellNumerator
uint256 divisor
toggleTransferTax 0xd912b2ce
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner

Token Balances (2) $565.76

View Transfers →
TokenBalancePriceValue
USDT 484.2703 $0.9999 $484.24
USDC 81.5266 $0.9999 $81.52

Recent Transactions

This address has 1 on-chain transactions, but only 1.6% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →