Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00
Cross-Chain Transactions
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 Name:
SigsRepo
Compiler Version
v0.8.8+commit.dddeac2f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED
/* *
* Copyright (c) 2021-2023 LI LI @ JINGTIAN & GONGCHENG.
*
* This WORK is licensed under ComBoox SoftWare License 1.0, a copy of which
* can be obtained at:
* [https://github.com/paul-lee-attorney/comboox]
*
* THIS WORK IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
* WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. IN NO
* EVENT SHALL ANY CONTRIBUTOR BE LIABLE TO YOU FOR ANY DAMAGES.
*
* YOU ARE PROHIBITED FROM DEPLOYING THE SMART CONTRACTS OF THIS WORK, IN WHOLE
* OR IN PART, FOR WHATEVER PURPOSE, ON ANY BLOCKCHAIN NETWORK THAT HAS ONE OR
* MORE NODES THAT ARE OUT OF YOUR CONTROL.
* */
pragma solidity ^0.8.8;
import "./EnumerableSet.sol";
library SigsRepo {
using EnumerableSet for EnumerableSet.UintSet;
struct Signature {
uint40 signer;
uint48 sigDate;
uint64 blocknumber;
bool flag;
uint16 para;
uint16 arg;
uint16 seq;
uint16 attr;
uint32 data;
}
struct Blank{
EnumerableSet.UintSet seqOfDeals;
Signature sig;
bytes32 sigHash;
}
// blanks[0].sig {
// sigDate: circulateDate;
// flag: established;
// para: counterOfBlanks;
// arg: counterOfSigs;
// seq: signingDays;
// attr: closingDays;
// }
struct Page {
// party => Blank
mapping(uint256 => Blank) blanks;
EnumerableSet.UintSet buyers;
EnumerableSet.UintSet sellers;
}
//###################
//## 设置接口 ##
//###################
function circulateDoc(
Page storage p
) public {
p.blanks[0].sig.sigDate = uint48(block.timestamp);
}
function setTiming(
Page storage p,
uint signingDays,
uint closingDays
) public {
p.blanks[0].sig.seq = uint16(signingDays);
p.blanks[0].sig.attr = uint16(closingDays);
}
function addBlank(
Page storage p,
bool beBuyer,
uint256 seq,
uint256 acct
) public {
require (seq > 0, "SR.AB: zero seq");
require (acct > 0, "SR.AB: zero acct");
if (beBuyer) {
require(!p.sellers.contains(acct), "SR.AB: seller intends to buy");
p.buyers.add(acct);
} else {
require(!p.buyers.contains(acct), "SR.AB: buyer intends to sell");
p.sellers.add(acct);
}
if (p.blanks[uint40(acct)].seqOfDeals.add(uint16(seq)))
_increaseCounterOfBlanks(p);
}
function removeBlank(
Page storage p,
uint256 seq,
uint256 acct
) public {
if (p.buyers.contains(acct) || p.sellers.contains(acct)) {
if (p.blanks[acct].seqOfDeals.remove(seq))
_decreaseCounterOfBlanks(p);
if (p.blanks[acct].seqOfDeals.length() == 0) {
delete p.blanks[acct];
p.buyers.remove(acct) || p.sellers.remove(acct);
}
}
}
function signDoc(Page storage p, uint256 acct, bytes32 sigHash)
public
{
require(block.timestamp < getSigDeadline(p) ||
getSigningDays(p) == 0,
"SR.SD: missed sigDeadline");
require(!established(p),
"SR.SD: Doc already established");
if ((p.buyers.contains(acct) || p.sellers.contains(acct)) &&
p.blanks[acct].sig.sigDate == 0) {
Signature storage sig = p.blanks[acct].sig;
sig.signer = uint40(acct);
sig.sigDate = uint48(block.timestamp);
sig.blocknumber = uint64(block.number);
p.blanks[acct].sigHash = sigHash;
_increaseCounterOfSigs(p, p.blanks[acct].seqOfDeals.length());
}
}
function regSig(Page storage p, uint256 acct, uint sigDate, bytes32 sigHash)
public returns (bool flag)
{
require(block.timestamp < getSigDeadline(p),
"SR.RS: missed sigDeadline");
require(!established(p),
"SR.regSig: Doc already established");
if (p.buyers.contains(acct) || p.sellers.contains(acct)) {
Signature storage sig = p.blanks[acct].sig;
sig.signer = uint40(acct);
sig.sigDate = uint48(sigDate);
sig.blocknumber = uint64(block.number);
p.blanks[acct].sigHash = sigHash;
_increaseCounterOfSigs(p, 1);
flag = true;
}
}
function _increaseCounterOfBlanks(Page storage p) private {
p.blanks[0].sig.para++;
}
function _decreaseCounterOfBlanks(Page storage p) private {
p.blanks[0].sig.para--;
}
function _increaseCounterOfSigs(Page storage p, uint qtyOfDeals) private {
p.blanks[0].sig.arg += uint16(qtyOfDeals);
}
//####################
//## Read I/O ##
//####################
function circulated(Page storage p) public view returns (bool)
{
return p.blanks[0].sig.sigDate > 0;
}
function established(Page storage p) public view returns (bool)
{
return counterOfBlanks(p) > 0
&& counterOfBlanks(p) == counterOfSigs(p);
}
function counterOfBlanks(Page storage p) public view returns(uint16) {
return p.blanks[0].sig.para;
}
function counterOfSigs(Page storage p) public view returns(uint16) {
return p.blanks[0].sig.arg;
}
function getCirculateDate(Page storage p) public view returns(uint48) {
return p.blanks[0].sig.sigDate;
}
function getSigningDays(Page storage p) public view returns(uint16) {
return p.blanks[0].sig.seq;
}
function getClosingDays(Page storage p) public view returns(uint16) {
return p.blanks[0].sig.attr;
}
function getSigDeadline(Page storage p) public view returns(uint48) {
return p.blanks[0].sig.sigDate + uint48(p.blanks[0].sig.seq) * 86400;
}
function getClosingDeadline(Page storage p) public view returns(uint48) {
return p.blanks[0].sig.sigDate + uint48(p.blanks[0].sig.attr) * 86400;
}
function isSigner(Page storage p, uint256 acct)
public view returns (bool)
{
return p.blanks[acct].sig.signer > 0;
}
function sigOfParty(Page storage p, uint256 acct) public view
returns (
uint256[] memory seqOfDeals,
Signature memory sig,
bytes32 sigHash
)
{
seqOfDeals = p.blanks[acct].seqOfDeals.values();
sig = p.blanks[acct].sig;
sigHash = p.blanks[acct].sigHash;
}
function sigsOfPage(Page storage p) public view
returns (
Signature[] memory sigsOfBuyer,
Signature[]memory sigsOfSeller
)
{
sigsOfBuyer = sigsOfSide(p, p.buyers);
sigsOfSeller = sigsOfSide(p, p.sellers);
}
function sigsOfSide(Page storage p, EnumerableSet.UintSet storage partiesOfSide)
public view
returns (Signature[] memory)
{
uint256[] memory parties = partiesOfSide.values();
uint256 len = parties.length;
Signature[] memory sigs = new Signature[](len);
while (len > 0) {
sigs[len-1] = p.blanks[parties[len-1]].sig;
len--;
}
return sigs;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol)
pragma solidity ^0.8.8;
library EnumerableSet {
struct Set {
bytes32[] _values;
mapping(bytes32 => uint256) _indexes;
}
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
function _remove(Set storage set, bytes32 value) private returns (bool) {
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
set._values[toDeleteIndex] = lastValue;
set._indexes[lastValue] = valueIndex;
}
delete set._values[lastIndex];
set._values.pop();
delete set._indexes[value];
return true;
} else {
return false;
}
}
function _contains(Set storage set, bytes32 value)
private
view
returns (bool)
{
return set._indexes[value] != 0;
}
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
function _at(Set storage set, uint256 index)
private
view
returns (bytes32)
{
return set._values[index];
}
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
//======== Bytes32Set ========
struct Bytes32Set {
Set _inner;
}
function add(Bytes32Set storage set, bytes32 value)
public
returns (bool)
{
return _add(set._inner, value);
}
function remove(Bytes32Set storage set, bytes32 value)
public
returns (bool)
{
return _remove(set._inner, value);
}
function contains(Bytes32Set storage set, bytes32 value)
public
view
returns (bool)
{
return _contains(set._inner, value);
}
function length(Bytes32Set storage set) public view returns (uint256) {
return _length(set._inner);
}
function at(Bytes32Set storage set, uint256 index)
public
view
returns (bytes32)
{
return _at(set._inner, index);
}
function values(Bytes32Set storage set)
public
view
returns (bytes32[] memory)
{
return _values(set._inner);
}
//======== AddressSet ========
struct AddressSet {
Set _inner;
}
function add(AddressSet storage set, address value)
public
returns (bool)
{
return _add(set._inner, bytes32(uint256(uint160(value))));
}
function remove(AddressSet storage set, address value)
public
returns (bool)
{
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
function contains(AddressSet storage set, address value)
public
view
returns (bool)
{
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
function length(AddressSet storage set) public view returns (uint256) {
return _length(set._inner);
}
function at(AddressSet storage set, uint256 index)
public
view
returns (address)
{
return address(uint160(uint256(_at(set._inner, index))));
}
function values(AddressSet storage set)
public
view
returns (address[] memory)
{
bytes32[] memory store = _values(set._inner);
address[] memory result;
assembly {
result := store
}
return result;
}
//======== UintSet ========
struct UintSet {
Set _inner;
}
function add(UintSet storage set, uint256 value) public returns (bool) {
return _add(set._inner, bytes32(value));
}
function remove(UintSet storage set, uint256 value)
public
returns (bool)
{
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value)
public
view
returns (bool)
{
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function length(UintSet storage set) public view returns (uint256) {
return _length(set._inner);
}
function at(UintSet storage set, uint256 index)
public
view
returns (uint256)
{
return uint256(_at(set._inner, index));
}
function values(UintSet storage set)
public
view
returns (uint256[] memory)
{
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
assembly {
result := store
}
return result;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {
"contracts/lib/EnumerableSet.sol": {
"EnumerableSet": "0xc4f24b69792ff96f0316fab2d7df198af8033930"
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract Creation Code
611c7d61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061012b5760003560e01c806351189a6d116100b7578063c3525e421161007b578063c3525e42146103cd578063c37e0e1b146103e0578063c50ce1d414610413578063dc050e9c14610442578063e1ad5c071461047757600080fd5b806351189a6d1461030e57806353c787ae1461032e57806368c232531461035d578063bbcf33c61461037d578063c018ec87146103ac57600080fd5b80631bf6af56116100fe5780631bf6af5614610210578063232fb7421461023057806324d431a31461025a578063314f082614610297578063432bea50146102aa57600080fd5b8063044ae65914610130578063089ee29f146101525780630b5b0ad5146101a35780630c43afec146101ce575b600080fd5b81801561013c57600080fd5b5061015061014b3660046117ab565b610497565b005b81801561015e57600080fd5b5061015061016d3660046117d7565b60008080526020919091526040902060020180546affffffffffff00000000001916600160281b4265ffffffffffff1602179055565b6101b66101b13660046117f0565b610852565b6040516101c5939291906118ce565b60405180910390f35b6101fd6101dc3660046117d7565b60008080526020919091526040902060020154600160d01b900461ffff1690565b60405161ffff90911681526020016101c5565b81801561021c57600080fd5b5061015061022b36600461193a565b6109ba565b61024361023e3660046117d7565b610dcf565b60405165ffffffffffff90911681526020016101c5565b6102876102683660046117f0565b6000908152602091909152604090206002015464ffffffffff16151590565b60405190151581526020016101c5565b6102876102a53660046117d7565b610e2a565b8180156102b657600080fd5b506101506102c53660046117ab565b60008080526020939093526040909220600201805463ffffffff60c01b1916600160c01b61ffff9384160261ffff60d01b191617600160d01b9290931691909102919091179055565b61032161031c3660046117f0565b610e7e565b6040516101c591906119bd565b6101fd61033c3660046117d7565b60008080526020919091526040902060020154600160b01b900461ffff1690565b81801561036957600080fd5b506101506103783660046117ab565b611094565b6101fd61038b3660046117d7565b60008080526020919091526040902060020154600160a01b900461ffff1690565b6103bf6103ba3660046117d7565b6113b1565b6040516101c59291906119d7565b6102436103db3660046117d7565b6113d7565b6102436103ee3660046117d7565b60008080526020919091526040902060020154600160281b900465ffffffffffff1690565b6101fd6104213660046117d7565b60008080526020919091526040902060020154600160c01b900461ffff1690565b6102876104503660046117d7565b60008080526020919091526040902060020154600160281b900465ffffffffffff16151590565b81801561048357600080fd5b506102876104923660046119fc565b611401565b604051633f5f77cd60e01b81526001840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156104eb57600080fd5b505af41580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190611a2e565b806105b55750604051633f5f77cd60e01b81526003840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561057d57600080fd5b505af4158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b59190611a2e565b1561084d576000818152602084905260409081902090516392fd02df60e01b815260048101919091526024810183905273c4f24b69792ff96f0316fab2d7df198af8033930906392fd02df9060440160206040518083038186803b15801561061c57600080fd5b505af4158015610630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106549190611a2e565b156106625761066283611666565b60008181526020849052604090819020905163c2b46a8560e01b8152600481019190915273c4f24b69792ff96f0316fab2d7df198af80339309063c2b46a859060240160206040518083038186803b1580156106bd57600080fd5b505af41580156106d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f59190611a4b565b61084d57600081815260208490526040812090818181816107168282611725565b505060006002850181905560039094019390935550506040516392fd02df60e01b81526001850160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393091506392fd02df9060440160206040518083038186803b15801561078157600080fd5b505af4158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190611a2e565b8061084b57506040516392fd02df60e01b81526003840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392fd02df9060440160206040518083038186803b15801561081357600080fd5b505af4158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611a2e565b505b505050565b606061085c611746565b600083815260208590526040808220905163034306e160e21b8152600481019190915273c4f24b69792ff96f0316fab2d7df198af803393090630d0c1b849060240160006040518083038186803b1580156108b657600080fd5b505af41580156108ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f29190810190611a7a565b600085815260208781526040808320815161012081018352600282015464ffffffffff81168252600160281b810465ffffffffffff1682860152600160581b810467ffffffffffffffff1693820193909352600160981b830460ff1615156060820152600160a01b830461ffff9081166080830152600160b01b8404811660a0830152600160c01b8404811660c0830152600160d01b84041660e0820152600160e01b90920463ffffffff166101008301529790925296909652600390940154939592505050565b60008211610a015760405162461bcd60e51b815260206004820152600f60248201526e53522e41423a207a65726f2073657160881b60448201526064015b60405180910390fd5b60008111610a445760405162461bcd60e51b815260206004820152601060248201526f14d48b90508e881e995c9bc81858d8dd60821b60448201526064016109f8565b8215610bb557604051633f5f77cd60e01b81526003850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b158015610a9e57600080fd5b505af4158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190611a2e565b15610b235760405162461bcd60e51b815260206004820152601c60248201527f53522e41423a2073656c6c657220696e74656e647320746f206275790000000060448201526064016109f8565b6040516392f13c3f60e01b81526001850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610b7757600080fd5b505af4158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf9190611a2e565b50610d1c565b604051633f5f77cd60e01b81526001850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b158015610c0957600080fd5b505af4158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190611a2e565b15610c8e5760405162461bcd60e51b815260206004820152601c60248201527f53522e41423a20627579657220696e74656e647320746f2073656c6c0000000060448201526064016109f8565b6040516392f13c3f60e01b81526003850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610ce257600080fd5b505af4158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190611a2e565b505b64ffffffffff81166000908152602085905260409081902090516392f13c3f60e01b8152600481019190915261ffff8316602482015273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610d8957600080fd5b505af4158015610d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc19190611a2e565b1561084b5761084b846116ae565b600080805260208290526040812060020154610df990600160c01b900461ffff1662015180611b4e565b600080805260208490526040902060020154610e249190600160281b900465ffffffffffff16611b7c565b92915050565b600080805260208290526040812060020154600160a01b900461ffff1615801590610e2457505060008080526020919091526040902060020154600160a01b810461ffff908116600160b01b909204161490565b60405163034306e160e21b81526004810182905260609060009073c4f24b69792ff96f0316fab2d7df198af803393090630d0c1b849060240160006040518083038186803b158015610ecf57600080fd5b505af4158015610ee3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f0b9190810190611a7a565b805190915060008167ffffffffffffffff811115610f2b57610f2b611a64565b604051908082528060200260200182016040528015610f6457816020015b610f51611746565b815260200190600190039081610f495790505b5090505b811561108b5785600084610f7d600186611ba6565b81518110610f8d57610f8d611bbd565b602090810291909101810151825281810192909252604090810160002081516101208101835260029091015464ffffffffff81168252600160281b810465ffffffffffff1693820193909352600160581b830467ffffffffffffffff1691810191909152600160981b820460ff1615156060820152600160a01b820461ffff9081166080830152600160b01b8304811660a0830152600160c01b8304811660c0830152600160d01b83041660e0820152600160e01b90910463ffffffff166101008201528161105d600185611ba6565b8151811061106d5761106d611bbd565b6020026020010181905250818061108390611bd3565b925050610f68565b95945050505050565b61109d83610dcf565b65ffffffffffff164210806110cc5750600080805260208490526040902060020154600160c01b900461ffff16155b6111185760405162461bcd60e51b815260206004820152601960248201527f53522e53443a206d697373656420736967446561646c696e650000000000000060448201526064016109f8565b61112183610e2a565b1561116e5760405162461bcd60e51b815260206004820152601e60248201527f53522e53443a20446f6320616c72656164792065737461626c6973686564000060448201526064016109f8565b604051633f5f77cd60e01b81526001840160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156111c257600080fd5b505af41580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190611a2e565b8061128c5750604051633f5f77cd60e01b81526003840160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561125457600080fd5b505af4158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190611a2e565b80156112b65750600082815260208490526040902060020154600160281b900465ffffffffffff16155b1561084d576000828152602084905260409081902060028101805464ffffffffff86166affffffffffffffffffffff1990911617600160281b4265ffffffffffff16021767ffffffffffffffff60581b1916600160581b4367ffffffffffffffff160217815560038201849055915163c2b46a8560e01b8152600481019190915261084b90859073c4f24b69792ff96f0316fab2d7df198af80339309063c2b46a859060240160206040518083038186803b15801561137457600080fd5b505af4158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190611a4b565b6116d8565b6060806113c18384600101610e7e565b91506113d08384600301610e7e565b9050915091565b600080805260208290526040812060020154610df990600160d01b900461ffff1662015180611b4e565b600061140c85610dcf565b65ffffffffffff1642106114625760405162461bcd60e51b815260206004820152601960248201527f53522e52533a206d697373656420736967446561646c696e650000000000000060448201526064016109f8565b61146b85610e2a565b156114c35760405162461bcd60e51b815260206004820152602260248201527f53522e7265675369673a20446f6320616c72656164792065737461626c697368604482015261195960f21b60648201526084016109f8565b604051633f5f77cd60e01b81526001860160048201526024810185905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561151757600080fd5b505af415801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190611a2e565b806115e15750604051633f5f77cd60e01b81526003860160048201526024810185905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156115a957600080fd5b505af41580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190611a2e565b1561165e57600084815260208690526040902060028101805464ffffffffff87166affffffffffffffffffffff1990911617600160281b65ffffffffffff8716021767ffffffffffffffff60581b1916600160581b4367ffffffffffffffff160217815560039091018390556116588660016116d8565b60019150505b949350505050565b60008080526020829052604090206002018054600160a01b900461ffff1690601461169083611bea565b91906101000a81548161ffff021916908361ffff1602179055505050565b60008080526020829052604090206002018054600160a01b900461ffff1690601461169083611c08565b60008080526020839052604090206002018054829190601690611707908490600160b01b900461ffff16611c2a565b92506101000a81548161ffff021916908361ffff1602179055505050565b50805460008255906000526020600020908101906117439190611792565b50565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b5b808211156117a75760008155600101611793565b5090565b6000806000606084860312156117c057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156117e957600080fd5b5035919050565b6000806040838503121561180357600080fd5b50508035926020909101359150565b64ffffffffff815116825265ffffffffffff6020820151166020830152604081015161184a604084018267ffffffffffffffff169052565b50606081015161185e606084018215159052565b506080810151611874608084018261ffff169052565b5060a081015161188a60a084018261ffff169052565b5060c08101516118a060c084018261ffff169052565b5060e08101516118b660e084018261ffff169052565b506101008181015163ffffffff81168483015261084b565b6101608082528451908201819052600090610180830190602090818801845b82811015611909578151855293830193908301906001016118ed565b50505081925061191b81850187611812565b505082610140830152949350505050565b801515811461174357600080fd5b6000806000806080858703121561195057600080fd5b8435935060208501356119628161192c565b93969395505050506040820135916060013590565b600081518084526020808501945080840160005b838110156119b25761199e878351611812565b61012096909601959082019060010161198b565b509495945050505050565b6020815260006119d06020830184611977565b9392505050565b6040815260006119ea6040830185611977565b828103602084015261108b8185611977565b60008060008060808587031215611a1257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611a4057600080fd5b81516119d08161192c565b600060208284031215611a5d57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611a8d57600080fd5b825167ffffffffffffffff80821115611aa557600080fd5b818501915085601f830112611ab957600080fd5b815181811115611acb57611acb611a64565b8060051b604051601f19603f83011681018181108582111715611af057611af0611a64565b604052918252848201925083810185019188831115611b0e57600080fd5b938501935b82851015611b2c57845184529385019392850192611b13565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600065ffffffffffff80831681851681830481118215151615611b7357611b73611b38565b02949350505050565b600065ffffffffffff808316818516808303821115611b9d57611b9d611b38565b01949350505050565b600082821015611bb857611bb8611b38565b500390565b634e487b7160e01b600052603260045260246000fd5b600081611be257611be2611b38565b506000190190565b600061ffff821680611bfe57611bfe611b38565b6000190192915050565b600061ffff80831681811415611c2057611c20611b38565b6001019392505050565b600061ffff808316818516808303821115611b9d57611b9d611b3856fea2646970667358221220098c4d9ff454f054db94ab67a94dbe249985baacdeebcef12c6dc2ea3c33943664736f6c63430008080033
Deployed Bytecode
0x7386132eed1084b46492ed7f4f28bb3d70ae2f2d5f301460806040526004361061012b5760003560e01c806351189a6d116100b7578063c3525e421161007b578063c3525e42146103cd578063c37e0e1b146103e0578063c50ce1d414610413578063dc050e9c14610442578063e1ad5c071461047757600080fd5b806351189a6d1461030e57806353c787ae1461032e57806368c232531461035d578063bbcf33c61461037d578063c018ec87146103ac57600080fd5b80631bf6af56116100fe5780631bf6af5614610210578063232fb7421461023057806324d431a31461025a578063314f082614610297578063432bea50146102aa57600080fd5b8063044ae65914610130578063089ee29f146101525780630b5b0ad5146101a35780630c43afec146101ce575b600080fd5b81801561013c57600080fd5b5061015061014b3660046117ab565b610497565b005b81801561015e57600080fd5b5061015061016d3660046117d7565b60008080526020919091526040902060020180546affffffffffff00000000001916600160281b4265ffffffffffff1602179055565b6101b66101b13660046117f0565b610852565b6040516101c5939291906118ce565b60405180910390f35b6101fd6101dc3660046117d7565b60008080526020919091526040902060020154600160d01b900461ffff1690565b60405161ffff90911681526020016101c5565b81801561021c57600080fd5b5061015061022b36600461193a565b6109ba565b61024361023e3660046117d7565b610dcf565b60405165ffffffffffff90911681526020016101c5565b6102876102683660046117f0565b6000908152602091909152604090206002015464ffffffffff16151590565b60405190151581526020016101c5565b6102876102a53660046117d7565b610e2a565b8180156102b657600080fd5b506101506102c53660046117ab565b60008080526020939093526040909220600201805463ffffffff60c01b1916600160c01b61ffff9384160261ffff60d01b191617600160d01b9290931691909102919091179055565b61032161031c3660046117f0565b610e7e565b6040516101c591906119bd565b6101fd61033c3660046117d7565b60008080526020919091526040902060020154600160b01b900461ffff1690565b81801561036957600080fd5b506101506103783660046117ab565b611094565b6101fd61038b3660046117d7565b60008080526020919091526040902060020154600160a01b900461ffff1690565b6103bf6103ba3660046117d7565b6113b1565b6040516101c59291906119d7565b6102436103db3660046117d7565b6113d7565b6102436103ee3660046117d7565b60008080526020919091526040902060020154600160281b900465ffffffffffff1690565b6101fd6104213660046117d7565b60008080526020919091526040902060020154600160c01b900461ffff1690565b6102876104503660046117d7565b60008080526020919091526040902060020154600160281b900465ffffffffffff16151590565b81801561048357600080fd5b506102876104923660046119fc565b611401565b604051633f5f77cd60e01b81526001840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156104eb57600080fd5b505af41580156104ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105239190611a2e565b806105b55750604051633f5f77cd60e01b81526003840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561057d57600080fd5b505af4158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b59190611a2e565b1561084d576000818152602084905260409081902090516392fd02df60e01b815260048101919091526024810183905273c4f24b69792ff96f0316fab2d7df198af8033930906392fd02df9060440160206040518083038186803b15801561061c57600080fd5b505af4158015610630573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106549190611a2e565b156106625761066283611666565b60008181526020849052604090819020905163c2b46a8560e01b8152600481019190915273c4f24b69792ff96f0316fab2d7df198af80339309063c2b46a859060240160206040518083038186803b1580156106bd57600080fd5b505af41580156106d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f59190611a4b565b61084d57600081815260208490526040812090818181816107168282611725565b505060006002850181905560039094019390935550506040516392fd02df60e01b81526001850160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393091506392fd02df9060440160206040518083038186803b15801561078157600080fd5b505af4158015610795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b99190611a2e565b8061084b57506040516392fd02df60e01b81526003840160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392fd02df9060440160206040518083038186803b15801561081357600080fd5b505af4158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190611a2e565b505b505050565b606061085c611746565b600083815260208590526040808220905163034306e160e21b8152600481019190915273c4f24b69792ff96f0316fab2d7df198af803393090630d0c1b849060240160006040518083038186803b1580156108b657600080fd5b505af41580156108ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108f29190810190611a7a565b600085815260208781526040808320815161012081018352600282015464ffffffffff81168252600160281b810465ffffffffffff1682860152600160581b810467ffffffffffffffff1693820193909352600160981b830460ff1615156060820152600160a01b830461ffff9081166080830152600160b01b8404811660a0830152600160c01b8404811660c0830152600160d01b84041660e0820152600160e01b90920463ffffffff166101008301529790925296909652600390940154939592505050565b60008211610a015760405162461bcd60e51b815260206004820152600f60248201526e53522e41423a207a65726f2073657160881b60448201526064015b60405180910390fd5b60008111610a445760405162461bcd60e51b815260206004820152601060248201526f14d48b90508e881e995c9bc81858d8dd60821b60448201526064016109f8565b8215610bb557604051633f5f77cd60e01b81526003850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b158015610a9e57600080fd5b505af4158015610ab2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad69190611a2e565b15610b235760405162461bcd60e51b815260206004820152601c60248201527f53522e41423a2073656c6c657220696e74656e647320746f206275790000000060448201526064016109f8565b6040516392f13c3f60e01b81526001850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610b7757600080fd5b505af4158015610b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baf9190611a2e565b50610d1c565b604051633f5f77cd60e01b81526001850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b158015610c0957600080fd5b505af4158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190611a2e565b15610c8e5760405162461bcd60e51b815260206004820152601c60248201527f53522e41423a20627579657220696e74656e647320746f2073656c6c0000000060448201526064016109f8565b6040516392f13c3f60e01b81526003850160048201526024810182905273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610ce257600080fd5b505af4158015610cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1a9190611a2e565b505b64ffffffffff81166000908152602085905260409081902090516392f13c3f60e01b8152600481019190915261ffff8316602482015273c4f24b69792ff96f0316fab2d7df198af8033930906392f13c3f9060440160206040518083038186803b158015610d8957600080fd5b505af4158015610d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc19190611a2e565b1561084b5761084b846116ae565b600080805260208290526040812060020154610df990600160c01b900461ffff1662015180611b4e565b600080805260208490526040902060020154610e249190600160281b900465ffffffffffff16611b7c565b92915050565b600080805260208290526040812060020154600160a01b900461ffff1615801590610e2457505060008080526020919091526040902060020154600160a01b810461ffff908116600160b01b909204161490565b60405163034306e160e21b81526004810182905260609060009073c4f24b69792ff96f0316fab2d7df198af803393090630d0c1b849060240160006040518083038186803b158015610ecf57600080fd5b505af4158015610ee3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f0b9190810190611a7a565b805190915060008167ffffffffffffffff811115610f2b57610f2b611a64565b604051908082528060200260200182016040528015610f6457816020015b610f51611746565b815260200190600190039081610f495790505b5090505b811561108b5785600084610f7d600186611ba6565b81518110610f8d57610f8d611bbd565b602090810291909101810151825281810192909252604090810160002081516101208101835260029091015464ffffffffff81168252600160281b810465ffffffffffff1693820193909352600160581b830467ffffffffffffffff1691810191909152600160981b820460ff1615156060820152600160a01b820461ffff9081166080830152600160b01b8304811660a0830152600160c01b8304811660c0830152600160d01b83041660e0820152600160e01b90910463ffffffff166101008201528161105d600185611ba6565b8151811061106d5761106d611bbd565b6020026020010181905250818061108390611bd3565b925050610f68565b95945050505050565b61109d83610dcf565b65ffffffffffff164210806110cc5750600080805260208490526040902060020154600160c01b900461ffff16155b6111185760405162461bcd60e51b815260206004820152601960248201527f53522e53443a206d697373656420736967446561646c696e650000000000000060448201526064016109f8565b61112183610e2a565b1561116e5760405162461bcd60e51b815260206004820152601e60248201527f53522e53443a20446f6320616c72656164792065737461626c6973686564000060448201526064016109f8565b604051633f5f77cd60e01b81526001840160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156111c257600080fd5b505af41580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190611a2e565b8061128c5750604051633f5f77cd60e01b81526003840160048201526024810183905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561125457600080fd5b505af4158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190611a2e565b80156112b65750600082815260208490526040902060020154600160281b900465ffffffffffff16155b1561084d576000828152602084905260409081902060028101805464ffffffffff86166affffffffffffffffffffff1990911617600160281b4265ffffffffffff16021767ffffffffffffffff60581b1916600160581b4367ffffffffffffffff160217815560038201849055915163c2b46a8560e01b8152600481019190915261084b90859073c4f24b69792ff96f0316fab2d7df198af80339309063c2b46a859060240160206040518083038186803b15801561137457600080fd5b505af4158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac9190611a4b565b6116d8565b6060806113c18384600101610e7e565b91506113d08384600301610e7e565b9050915091565b600080805260208290526040812060020154610df990600160d01b900461ffff1662015180611b4e565b600061140c85610dcf565b65ffffffffffff1642106114625760405162461bcd60e51b815260206004820152601960248201527f53522e52533a206d697373656420736967446561646c696e650000000000000060448201526064016109f8565b61146b85610e2a565b156114c35760405162461bcd60e51b815260206004820152602260248201527f53522e7265675369673a20446f6320616c72656164792065737461626c697368604482015261195960f21b60648201526084016109f8565b604051633f5f77cd60e01b81526001860160048201526024810185905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b15801561151757600080fd5b505af415801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f9190611a2e565b806115e15750604051633f5f77cd60e01b81526003860160048201526024810185905273c4f24b69792ff96f0316fab2d7df198af803393090633f5f77cd9060440160206040518083038186803b1580156115a957600080fd5b505af41580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190611a2e565b1561165e57600084815260208690526040902060028101805464ffffffffff87166affffffffffffffffffffff1990911617600160281b65ffffffffffff8716021767ffffffffffffffff60581b1916600160581b4367ffffffffffffffff160217815560039091018390556116588660016116d8565b60019150505b949350505050565b60008080526020829052604090206002018054600160a01b900461ffff1690601461169083611bea565b91906101000a81548161ffff021916908361ffff1602179055505050565b60008080526020829052604090206002018054600160a01b900461ffff1690601461169083611c08565b60008080526020839052604090206002018054829190601690611707908490600160b01b900461ffff16611c2a565b92506101000a81548161ffff021916908361ffff1602179055505050565b50805460008255906000526020600020908101906117439190611792565b50565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b5b808211156117a75760008155600101611793565b5090565b6000806000606084860312156117c057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156117e957600080fd5b5035919050565b6000806040838503121561180357600080fd5b50508035926020909101359150565b64ffffffffff815116825265ffffffffffff6020820151166020830152604081015161184a604084018267ffffffffffffffff169052565b50606081015161185e606084018215159052565b506080810151611874608084018261ffff169052565b5060a081015161188a60a084018261ffff169052565b5060c08101516118a060c084018261ffff169052565b5060e08101516118b660e084018261ffff169052565b506101008181015163ffffffff81168483015261084b565b6101608082528451908201819052600090610180830190602090818801845b82811015611909578151855293830193908301906001016118ed565b50505081925061191b81850187611812565b505082610140830152949350505050565b801515811461174357600080fd5b6000806000806080858703121561195057600080fd5b8435935060208501356119628161192c565b93969395505050506040820135916060013590565b600081518084526020808501945080840160005b838110156119b25761199e878351611812565b61012096909601959082019060010161198b565b509495945050505050565b6020815260006119d06020830184611977565b9392505050565b6040815260006119ea6040830185611977565b828103602084015261108b8185611977565b60008060008060808587031215611a1257600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215611a4057600080fd5b81516119d08161192c565b600060208284031215611a5d57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611a8d57600080fd5b825167ffffffffffffffff80821115611aa557600080fd5b818501915085601f830112611ab957600080fd5b815181811115611acb57611acb611a64565b8060051b604051601f19603f83011681018181108582111715611af057611af0611a64565b604052918252848201925083810185019188831115611b0e57600080fd5b938501935b82851015611b2c57845184529385019392850192611b13565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b600065ffffffffffff80831681851681830481118215151615611b7357611b73611b38565b02949350505050565b600065ffffffffffff808316818516808303821115611b9d57611b9d611b38565b01949350505050565b600082821015611bb857611bb8611b38565b500390565b634e487b7160e01b600052603260045260246000fd5b600081611be257611be2611b38565b506000190190565b600061ffff821680611bfe57611bfe611b38565b6000190192915050565b600061ffff80831681811415611c2057611c20611b38565b6001019392505050565b600061ffff808316818516808303821115611b9d57611b9d611b3856fea2646970667358221220098c4d9ff454f054db94ab67a94dbe249985baacdeebcef12c6dc2ea3c33943664736f6c63430008080033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.