Home
Softono
GETProtocolCoreV1.0-DEPRECIATED

GETProtocolCoreV1.0-DEPRECIATED

Open source Solidity
30
Stars
12
Forks
0
Issues
0
Watchers
4 years
Last Commit

About GETProtocolCoreV1.0-DEPRECIATED

🎫 Contract overview and definition of GET Protocol's NFTs

Platforms

Web Self-hosted

Languages

Solidity

GET Protocol Contracts V1.0 - DEPRECIATED

Technical documentation coverting the GET Protocols contracts. Issuing getNFT (digital twins of event tickets).

Note: The contracts in this repo represent the OLD NFT minting contracts. Our new code base is currently undergoing its final checks. The code in this repo is NOT representitive of GET Protocols smart contract stack (regarding both ticketing as event financing).

Deployed Contracts

In the tables the address of protocols contracts are detailed.

Production Contracts (Polygon Mainnet)

Take note these are proxy addresses, they only contain storage and no implememntation logic. See Open Zeppelin transparent proxy pattern. | Name | Contract type | Address | | ------ | ------ | ------ | | Proxy AccessControlGET | Proxy | Polygonscan Mainnet | | Proxy EventMetadataStorage | Proxy | Polygonscan Mainnet | | Proxy EconomicsGET | Proxy | Polygonscan Mainnet | | Proxy BaseGET | Proxy | Polygonscan Mainnet | | Proxy ERC721UpgradeableGET | Proxy | Polygonscan Mainnet | | Proxy GetEventFinancing | Proxy | Polygonscan Mainnet | | Proxy GETProtocolConfiguration | Proxy | Polygonscan Mainnet | | Polygon GET (bridged from ETH GET) | ERC20 | Polygonscan Mainnet |


Playground Contracts (Polygon Testnet - Mumbai)

This is a testnet enviroment used by integrators and the development team.

Proxy contract addresses (remain unchanged regardless) | Name | Contract type | Address | | ------ | ------ | ------ | | Proxy AccessControlGET | Proxy | Polygonscan Mumbai | | Proxy EventMetadataStorage | Proxy | Polygonscan Mumbai | | Proxy EconomicsGET | Proxy | Polygonscan Mumbai | | Proxy BaseGET | Proxy | Polygonscan Mumbai | | Proxy ERC721UpgradeableGET | Proxy | Polygonscan Mumbai | | Proxy ConfigurationGET | Proxy | Polygonscan Mumbai | | Proxy GetEventFinancing | Proxy | Polygonscan Mumbai | | MockGET | ERC20 | Polygonscan Mumbai |


Testing Contracts (Polygon Testnet - Mumbai)

This is a testnet enviroment used by integrators and the development team. Proxy contract addresses (remain unchanged regardless) | Name | Contract type | Address | | ------ | ------ | ------ | | Proxy AccessControlGET | Proxy | Polygonscan Mumbai | | Proxy EventMetadataStorage | Proxy | Polygonscan Mumbai | | Proxy EconomicsGET | Proxy | Polygonscan Mumbai | | Proxy BaseGET | Proxy | Polygonscan Mumbai | | Proxy ERC721UpgradeableGET | Proxy | Polygonscan Mumbai | | Proxy ConfigurationGET | Proxy | Polygonscan Mumbai | | Proxy GetEventFinancing | Proxy | Polygonscan Mumbai | | MockGET | ERC20 | Polygonscan Mumbai |


Key Protocol Addresses

GET Protocol Whitelabel address(es) - WL

relayerAddress (1): 0x383F07EccE503801F636Ad455106e270748bdE05 BufferAddress WL: 0xbC0A62565b48258665b9cee793af87C93a22A49E

YourTicketProvider address(es) - YTP

relayerAddress (1): 0xb9F77e8FE9AEf5df3A4C3c465B9D88423e41F41a BufferAddress YTP: 0x0Eb7C00C78BFFefa65eB01d92D3778bDe630381B

DAOTreasury Contract

Gnosis multi sig address: 0x4E242E831eE532AE39E626D254e5a718270dd75B The Gnosis multisig is deployed on Polygon blockchain.


Key Protocol Addresses Playground and Testing

Relayer 1 Playground: 0xEA7DFF0629474f9aAC107e01FA563c62498C90Fd Relayer 2 Playground: 0x492f5C2B40F22a21E1dfC91fde7e1Be884faA497

Bufferaddress relayer 1 - Playground: 0x441ca9c552809863B719b7a780C67250F0DD20eD Bufferaddress relayer 2 - Playground: 0x779Ae6498c27b572a8f6A9B9432299612D3331FB

Testing - Token economic addresses

Relayer 1 Testing: 0x35D59a290b08D2081441922aA9D4A36a9dd83dCA Relayer 2 Testing: 0x5400249158F83309AFCd8210ce0c995dB0B16E25

Bufferaddress relayer 1 Testing: 0x441ca9c552809863B719b7a780C67250F0DD20eD Bufferaddress relayer 2 Testing: 0x779Ae6498c27b572a8f6A9B9432299612D3331FB


BaseGET (proxy)

Main contact point for interactions regarding NFTs. Stores the metadata (price, strings etc) of the ticket NFTs. Contract does NOT store/register whom owns an NFT as this is done by the getERC721 proxy contract.

primarySale:

Issuance of getNFT to address destinationAddress.\

    function primarySale(
        address _destinationAddress, 
        address _eventAddress, 
        uint256 _primaryPrice,
        uint256 _basePrice,
        uint256 _orderTime,
        bytes32[] calldata _ticketMetadata
    ) external onlyRelayer {

Events emitted: PrimarySaleMint

    event PrimarySaleMint(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime,
        uint256 basePrice
    );

secondaryTransfer

Secondary market/P2P getNFT ownership change.\

    function secondaryTransfer(
        address _originAddress, 
        address _destinationAddress,
        uint256 _orderTime,
        uint256 _secondaryPrice) external onlyRelayer {

Events emitted: SecondarySale

    event SecondarySale(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime,
        uint256 resalePrice
    );

scanNFT

Validation of getNFT by scanner/issuer. Does not make NFT claimable.\

    function scanNFT(
        address _originAddress,
        uint256 _orderTime
    ) external onlyRelayer {

Events emitted: IllegalScan or TicketScanned

    event TicketScanned(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    );

or

    event IllegalScan(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    );

invalidateAddressNFT

Invalidates getNFT (makes unscannable, unclaimable).\

    function invalidateAddressNFT(
        address _originAddress, 
        uint256 _orderTime) external onlyRelayer {

Events emitted: TicketInvalidated

    event TicketInvalidated(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    ); 

claimgetNFT

Claims an NFT from custody controlled EOA to an external EOA\

    function claimgetNFT(
        address _originAddress, 
        address _externalAddress,
        uint256 _orderTime) external onlyRelayer {

Events emitted: NftClaimed

    event NftClaimed(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    );

checkIn

Checks in NFT, makes the asset CLAIMABLE. Drains the GET in the backpack to the DAO.

    function checkIn(
        address _originAddress,
        uint256 _orderTime
    ) external onlyRelayer {

Events emitted: CheckedIn

    event CheckedIn(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    );

or

    event NftClaimed(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime
    );

collateralMint

    function collateralMint(
        address _basketAddress,
        address _eventAddress, 
        uint256 _primaryPrice,
        bytes32[] calldata _ticketMetadata
    ) external onlyFactory {

Events emitted: CollateralizedMint

    event CollateralizedMint(
        uint256 indexed nftIndex,
        uint64 indexed getUsed,
        uint64 indexed orderTime,
        uint256 basePrice
    );

isNFTSellable (VIEW)

Returns if a NFT owned by a certain address can be resold.

    function isNFTSellable(
        uint256 _nftIndex,
        address _originAddress
    ) public view returns(bool _sell) {

ticketMetadataAddress (VIEW)

Returns the metadata stored in an NFT.

    function ticketMetadataAddress(
        address _originAddress)
      external view returns (
          address _eventAddress,
          bytes32[] memory _ticketMetadata,
          uint32[2] memory _salePrices,
          TicketStates _state
      )

EventMetadataStorage (proxy)

Stores the metadata of the events on the GET Protocol.

    function registerEvent(
      address _eventAddress,
      address _integratorAccountPublicKeyHash,
      string memory _eventName, 
      string memory _shopUrl,
      string memory _imageUrl,
      bytes32[4] memory _eventMeta, // -> [bytes32 latitude, bytes32 longitude, bytes32  currency, bytes32 ticketeerName]
      uint256[2] memory _eventTimes, // -> [uin256 startingTime, uint256 endingTime]
      bool _setAside, // -> false = default
      bytes32[] memory _extraData,
      bool _isPrivate
      ) public onlyRelayer {

Events emitted: NewEventRegistered

    event NewEventRegistered(
      address indexed eventAddress,
      uint256 indexed getUsed,
      string eventName,
      uint256 indexed orderTime
    );

EconomicsGET (proxy)

Contract holds the GET balances and on-chain charging configuration of ticketeers(both whitelabels as digital twins). Fuels the NFTs in the depot contract.

topUpRelayerFromBuffer:

Charge GET to the ticketeer silo in the economics contract.

    function topUpRelayerFromBuffer(
            uint256 _topUpAmount,
            uint256 _priceGETTopUp,
            address _relayerAddress
        ) external onlyAdmin nonReentrant onlyConfigured(_relayerAddress) returns(uint256) {

Events emitted: RelayerToppedUpBuffer

    event RelayerToppedUpBuffer(
        address indexed relayerAddress,
        uint256 indexed topUpAmount,
        uint256 priceGETTopUp,
        uint256 indexed newsiloprice
    );

setDynamicRateStruct ONLYADMIN

loads the NFT balance with GET in its backpack (called by economicsGET)\

    function setDynamicRateStruct(
        address _relayerAddress,
        uint32[12] calldata dynamicRates
    ) external onlyAdmin {

Events emitted: RelayerConfiguration

    event RelayerConfiguration(
        address relayerAddress,
        uint32[12] dynamicRates
    );

setRelayerBuffer: ONLYADMIN

    function setRelayerBuffer(
        address _relayerAddress,
        address _bufferAddressRelayer
    ) external onlyAdmin {

Events emitted: RelayerBufferMapped

    event RelayerBufferMapped(
        address relayerAddress,
        address bufferAddressRelayer
    );

clearDynamicRateStruct ONLYADMIN

    function clearDynamicRateStruct(
        address _relayerAddress
    ) external onlyAdmin {

Events emitted: RelayerConfigurationCleared

    event RelayerConfigurationCleared(
        address relayerAddress
    );

_calculateNewAveragePrice INTERNAL

    function _calculateNewAveragePrice(
        uint256 _topUpAmount, 
        uint256 _priceGETTopUp, 
        address _relayerAddress
    ) internal returns(uint256) {

Events emitted: AveragePriceUpdated

    event AverageSiloPriceUpdated(
        address relayerAddress,
        uint256 oldPrice,
        uint256 newPrice
    );

fuelBackpackTicket

    function fuelBackpackTicket(
        uint256 _nftIndex,
        address _relayerAddress,
        uint256 _basePrice
        ) external onlyFactory onlyConfigured(_relayerAddress) returns (uint256) 

swipeDepotBalance

Moves the accumulated GET from the depot to the DAO treasury.

    function swipeDepotBalance() external nonReentrant returns(uint256) {
        require(collectedDepot > 0, "NOTHING_TO_SWIPE");

Events emitted: DepotSwiped

    event DepotSwiped(
        address feeCollectorAddress,
        uint256 balance
    );

emptyBackpackBasic

Moves all the GET from the backpack to the depot.

    function emptyBackpackBasic(
        uint256 _nftIndex
    ) external onlyFactory returns(uint256) {

chargeTaxRateBasic

    function chargeTaxRateBasic(
        uint256 _nftIndex
    ) external onlyFactory returns(uint256) {

chargeTaxRateBasic

    function chargeTaxRateBasic(
        uint256 _nftIndex
    ) external onlyFactory returns(uint256) {

balanceRelayerSilo VIEW

    function balanceRelayerSilo(
        address _relayerAddress
    ) external view returns (uint256) 

checkRelayerConfiguration VIEW

    function checkRelayerConfiguration(
        address _relayerAddress
    ) external view returns (bool) {

chargeTaxRateBasic VIEW

    function chargeTaxRateBasic(
        uint256 _nftIndex
    ) external onlyFactory returns(uint256) {

valueRelayerSilo VIEW

    function valueRelayerSilo(
        address _relayerAddress
    ) public view returns(uint256) {

estimateNFTMints VIEW

    function estimateNFTMints(
        address _relayerAddress
    ) external view returns(uint256) {

viewRelayerRates VIEW

    function viewRelayerRates(
        address _relayerAddress
    ) external view returns (DynamicRateStruct memory) 

viewRelayerFactor VIEW

    function viewRelayerFactor(
        address _relayerAddress
    ) external view returns (uint256) {

viewRelayerGETPrice VIEW

    function viewRelayerGETPrice(
        address _relayerAddress 
    ) external view returns (uint256) {

viewBackPackBalance VIEW

    function viewBackPackBalance(
        uint256 _nftIndex
    ) external view returns (uint256) {

viewBackPackValue VIEW

    function viewBackPackValue(
        uint256 _nftIndex,
        address _relayerAddress
    ) external view returns (uint256) {

viewDepotBalance VIEW

    function viewDepotBalance() external view returns(uint256) {

viewDepotValue VIEW

    function viewDepotValue() external view returns(uint256) {

viewBufferOfRelayer VIEW

    function viewBufferOfRelayer(
        address _relayerAddress
    ) public view returns (address) {

GETProtocolConfigurationn (proxy)

The Configuration contract contains all the global protocol variables and configurations.

setAllContractsStorageProxies

    function setAllContractsStorageProxies(
        address _access_control_proxy,
        address _base_proxy,
        address _erc721_proxy,
        address _metadata_proxy,
        address _financing_proxy,
        address _economics_proxy
    ) external onlyOwner {

setAccessControlGETProxy

    function setAccessControlGETProxy(
        address _access_control_proxy
        ) external onlyOwner {

Events emitted: UpdateAccessControl

event UpdateAccessControl(address _old, address _new);

setBASEProxy

    function setBASEProxy(
        address _base_proxy) external onlyOwner {

Events emitted: UpdatebaseGETNFT

event UpdatebaseGETNFT(address _old, address _new);

setMetaProxy

    function setMetaProxy(
        address _metadata_proxy) external onlyOwner {

Events emitted: UpdateMetdata

event UpdateMetdata(address _old, address _new);

setERC721Proxy

    function setERC721Proxy(
        address _erc721_proxy) external onlyOwner {

Events emitted: UpdateERC721

event setERC721Proxy(address _old, address _new);

setMetaProxy

    function setMetaProxy(
        address _metadata_proxy) external onlyOwner {

Events emitted: setMetaProxy

event setMetaProxy(address _old, address _new);

setFinancingProxy

    function setFinancingProxy(
        address _financing_proxy) external onlyOwner {

Events emitted: UpdateFinancing

event UpdateFinancing(address _old, address _new);

setGETUSD

    function setGETUSD(
        uint256 _newGETUSD
    ) external onlyOwner {

Events emitted: UpdateGETUSD

event UpdateGETUSD(uint256 _old, uint256 _new);

setBasicTaxRate

    function setBasicTaxRate(
        uint256 _basicTaxRate
    ) external onlyOwner {

Events emitted: UpdateBasicTaxRate

event UpdateBasicTaxRate(uint256 _old, uint256 _new);