Skip to content

p2p-org/marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DGaming Marketplace

Init and run a node

Init node configuration with:

mpd init [node_name] --chain-id [chain_id] 

To specify maximum beneficiary fee init with flag 'max-commission'. Example:

mpd init node0 --chain-id mpchain --max-commission 0.07

To run a node with a script:

./run.sh

Additional parameters

-h, --help                show brief help
--demo                    set demo mode (add demo accounts)
-n, --num_account=n       specify number of demo accounts | 200 default
-m, --money=m             specify token amount for demo account | 100000token default
-s, --stake=s             specify stake amount for demo account | 100000000 default
-o, --output_file=o       specify output file | out.txt default
--embeded                 set embeded mode (for docker)

example:

$ ./run.sh --demo -n 5 -m 100token -s 200

This will start a node with two users, user1 and user2 (both are validators).

Client commands

To get information about account:

$ mpcli query account $(mpcli keys show [name] -a)

Example:

$ mpcli query account $(mpcli keys show user1 -a)

To mint an NFT for that user:

mpcli tx nft mint name $(uuidgen) $(mpcli keys show user1 -a) --from user1 

The token is not put on the market when minted.

To transfer a token from user1 to user2:

mpcli tx nft transfer cosmos16y2vaas25ea8n353tfve45rwvt4sx0gl627pzn $(mpcli keys show user1 -a) name 686769b1-9395-4821-8a9e-36008ad4ca7c --from user1

To put a token on market (to make it purchasable by anybody who offers the exact price you specified):

mpcli tx marketplace put_on_market 686769b1-9395-4821-8a9e-36008ad4ca7c 150token cosmos16y2vaas25ea8n353tfve45rwvt4sx0gl627pzn --from user1

Note that you must provide the beneficiary address.

To buy a token:

mpcli tx marketplace buy 686769b1-9395-4821-8a9e-36008ad4ca7c cosmos16y2vaas25ea8n353tfve45rwvt4sx0gl627pzn --from user2

To buy a token with specified commission add 'beneficiary-commission' (--beneficiary-commission or -c) flag

mpcli tx marketplace buy 686769b1-9395-4821-8a9e-36008ad4ca7c cosmos16y2vaas25ea8n353tfve45rwvt4sx0gl627pzn -c 0.013 --from user2

or

mpcli tx marketplace buy 686769b1-9395-4821-8a9e-36008ad4ca7c cosmos16y2vaas25ea8n353tfve45rwvt4sx0gl627pzn --beneficiary-commission 0.013 --from user2

To create some number of fungible tokens:

mpcli tx marketplace createFT fungible 1000 --from user1

To transfer some amount of fungible tokens:

mpcli tx marketplace transferFT $(mpcli keys show user1 -a) fungible 500  --from user1

Make an offer for an NFT that is not currently on sale:

mpcli tx marketplace offer TOKEN_ID 10token cosmos1j3zptzhjltjyrdn34vz0lvcwd86dl0nh86p65a --from user2

Accept the offer (offer ID can be found by running mpcli query nft TOKEN_ID):

mpcli tx marketplace accept_offer TOKEN_ID OFFER_ID cosmos1nglxddxs3w79fhv5j6ddtudkqn50zzg3p40kyw --from user1

Full scenario

After running ./run.sh, 4 users are created: user1 (minter and seller), user2 (buyer), sellerBeneficiary and buyerBeneficiary (each has 1000token coins in the beginning).

Mint a new token:

$ mpcli tx marketplace mint $(uuidgen) name description image token_uri --from user1

Output:

{
  "chain_id": "mpchain",
  "account_number": "0",
  "sequence": "1",
  "fee": {
    "amount": [],
    "gas": "200000"
  },
  "msgs": [
    {
      "type": "marketplace/MintNFT",
      "value": {
        "owner": "cosmos1qv79nvxnkq7pf2tgrgjz53w9as6hlp7zszcpvr",
        "name": "name",
        "description": "description",
        "image": "image",
        "token_uri": "token_uri"
      }
    }
  ],
  "memo": ""
}

confirm transaction before signing and broadcasting [y/N]: y
Password to sign with 'user1':
{
  "height": "0",
  "txhash": "12AAB743F568E72E22E05C040AFA9CB5450C70FF709AFBFF1B51D6A8BDED2359"
}

Change token params: Use 'update_params' with flags --image --price --description --token_uri --name

mpcli tx marketplace update_params 4eb281c9-1eea-4aab-b508-a3c27828b572 --from user1 -i newimage -p 500token -d newdescription -u newuri -n newname

List nfts:

$ mpcli query marketplace nfts

Output:

{
  "nfts": [
    {
      "nft": {
        "id": "4eb281c9-1eea-4aab-b508-a3c27828b572",
        "owner": "cosmos1qv79nvxnkq7pf2tgrgjz53w9as6hlp7zszcpvr",
        "name": "name",
        "description": "description",
        "image": "image",
        "token_uri": "token_uri"
      },
      "price": [],
      "on_sale": false,
      "seller_beneficiary": ""
    }
  ]
}

Put the new token on the market (and specify sellerBeneficiary):

$ mpcli tx marketplace put_on_market 4eb281c9-1eea-4aab-b508-a3c27828b572 650token cosmos1497eedaprzjvydwvgj5tu9e97agw30d7ksj99r --from user1

Output:

{
  "chain_id": "mpchain",
  "account_number": "0",
  "sequence": "2",
  "fee": {
    "amount": [],
    "gas": "200000"
  },
  "msgs": [
    {
      "type": "marketplace/PutOnMarketNFT",
      "value": {
        "owner": "cosmos1qv79nvxnkq7pf2tgrgjz53w9as6hlp7zszcpvr",
        "beneficiary": "cosmos1497eedaprzjvydwvgj5tu9e97agw30d7ksj99r",
        "token_id": "4eb281c9-1eea-4aab-b508-a3c27828b572",
        "price": [
          {
            "denom": "token",
            "amount": "650"
          }
        ]
      }
    }
  ],
  "memo": ""
}

confirm transaction before signing and broadcasting [y/N]: y
Password to sign with 'user1':
{
  "height": "0",
  "txhash": "B5CA8C210EECBD58E2B35EE5B7BD35BA0F64B032CC7D151997FE96B162CB932A"
}

Buy the token (and specify buyerBeneficiary):

$ mpcli tx marketplace buy 4eb281c9-1eea-4aab-b508-a3c27828b572 cosmos1qgq89a2xquyasydkyu6x7x96fq822z3em2t8xf --from user2

Output:

{
  "chain_id": "mpchain",
  "account_number": "1",
  "sequence": "0",
  "fee": {
    "amount": [],
    "gas": "200000"
  },
  "msgs": [
    {
      "type": "marketplace/BuyNFT",
      "value": {
        "buyer": "cosmos19608kpjnmmhzc2r9qp45eqd89m4c0z0wv7fy3j",
        "beneficiary": "cosmos1qgq89a2xquyasydkyu6x7x96fq822z3em2t8xf",
        "token_id": "4eb281c9-1eea-4aab-b508-a3c27828b572"
      }
    }
  ],
  "memo": ""
}

confirm transaction before signing and broadcasting [y/N]: y
Password to sign with 'user2':
{
  "height": "0",
  "txhash": "4A320FF2637F4274FDAE00F0D9CADFAF6772F223200D45FCA34D630E2B30A138"
}

After this we have token balances updated:

$ mpcli query account $(mpcli keys show buyerBeneficiary -a)

Output:

{
  "type": "auth/Account",
  "value": {
    "address": "cosmos1qgq89a2xquyasydkyu6x7x96fq822z3em2t8xf",
    "coins": [
      {
        "denom": "stake",
        "amount": "100000000"
      },
      {
        "denom": "token",
        "amount": "1004"
      }
    ],
    "public_key": null,
    "account_number": "3",
    "sequence": "0"
  }
}
$ mpcli query account $(mpcli keys show sellerBeneficiary -a)

Output:

{
  "type": "auth/Account",
  "value": {
    "address": "cosmos1497eedaprzjvydwvgj5tu9e97agw30d7ksj99r",
    "coins": [
      {
        "denom": "stake",
        "amount": "100000000"
      },
      {
        "denom": "token",
        "amount": "1004"
      }
    ],
    "public_key": null,
    "account_number": "2",
    "sequence": "0"
  }
}
$ mpcli query account $(mpcli keys show user1 -a)

Output:

{
  "type": "auth/Account",
  "value": {
    "address": "cosmos1qv79nvxnkq7pf2tgrgjz53w9as6hlp7zszcpvr",
    "coins": [
      {
        "denom": "token",
        "amount": "1634"
      }
    ],
    "public_key": {
      "type": "tendermint/PubKeySecp256k1",
      "value": "Ap0y3b8HOn1unrSvTOwSJ82ykJnqHE4RkL0Tj56d3mEX"
    },
    "account_number": "0",
    "sequence": "3"
  }
}
$ mpcli query account $(mpcli keys show user2 -a)

Output:

{
  "type": "auth/Account",
  "value": {
    "address": "cosmos19608kpjnmmhzc2r9qp45eqd89m4c0z0wv7fy3j",
    "coins": [
      {
        "denom": "stake",
        "amount": "100000000"
      },
      {
        "denom": "token",
        "amount": "349"
      }
    ],
    "public_key": {
      "type": "tendermint/PubKeySecp256k1",
      "value": "ApjMM44kZ8YAolktUY4Qj5nbwjGRsCcfhVtim/FM8rLs"
    },
    "account_number": "1",
    "sequence": "1"
  }
}

REST

Run rest server:

mpcli rest-server --chain-id mpchain --trust-node

NFT queries

List all NFTs:

curl -s http://localhost:1317/marketplace/nfts

Get NFT buy id:

curl -s http://localhost:1317/marketplace/nfts/cf9d19be-30f8-429e-9a75-8f997f524481

NFT txs

Mint a new NFT:

curl -XPUT -s http://localhost:1317/marketplace/mint --data-binary 
'{  
    "base_req":{  
        "from":"'$(mpcli keys show user1 -a)'",
        "chain_id":"mpchain",
        "sequence":"1",
        "account_number":"0"
    },
    "token_name":"name",
    "token_id":"'$(uuidgen)'",
    "owner":"user1",
    "name":"user1",
    "password":"12345678",
    "description":"desc",
    "image":"ing",
    "token_uri":"uri"
}'

Put NFT on market:

curl -XPUT -s http://localhost:1317/marketplace/put_on_market --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"2",
         "account_number":"0"
     },
     "token_id":"cf9d19be-30f8-429e-9a75-8f997f524481",
     "name":"user1",
     "password":"12345678",
     "beneficiary":"'$(mpcli keys show sellerBeneficiary -a)'",
     "price":"650token"
}'

Buy NFT:

curl -XPUT -s http://localhost:1317/marketplace/buy --data-binary 
'{  
   "base_req":{  
       "from":"'$(mpcli keys show user2 -a)'",
       "chain_id":"mpchain",
       "sequence":"0",
       "account_number":"1"
   },
   "token_id":"cf9d19be-30f8-429e-9a75-8f997f524481",
   "name":"user2",
   "password":"12345678",
   "beneficiary":"'$(mpcli keys show buyerBeneficiary -a)'"
}'

Update NFT's params:

curl -XPUT -s http://localhost:1317/marketplace/update_params --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"3",
         "account_number":"0"
     },
     "token_name":"name",
     "token_id":"cf9d19be-30f8-429e-9a75-8f997f524481",
     "name":"user1",
     "password":"12345678",
     "image":"newimage"
}'

Transfer NFT:

curl -XPUT -s http://localhost:1317/marketplace/transfer --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"4",
         "account_number":"0"
     },
     "token_id":"cf9d19be-30f8-429e-9a75-8f997f524481",
     "name":"user1",
     "password":"12345678",
     "recipient":"'$(mpcli keys show user2 -a)'"
}'

Fungible Tokens queries

List all FTs:

curl -s http://localhost:1317/marketplace/fungible_tokens

Get FT buy name:

curl -s http://localhost:1317/marketplace/fungible_tokens/token

Fungible Tokens txs

Create fungible token:

curl -XPUT -s http://localhost:1317/marketplace/create_ft --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"1",
         "account_number":"0"
     },
     "denom":"pigs",
     "amount":"100",
     "name":"user1",
     "password":"12345678"
}'

Burn fungible token:

curl -XPUT -s http://localhost:1317/marketplace/burn_ft --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"2",
         "account_number":"0"
     },
     "denom":"pigs",
     "amount":"15",
     "name":"user1",
     "password":"12345678"
}'

Transfer fungible token:

curl -XPUT -s http://localhost:1317/marketplace/transfer_ft --data-binary 
'{  
     "base_req":{  
         "from":"'$(mpcli keys show user1 -a)'",
         "chain_id":"mpchain",
         "sequence":"3",
         "account_number":"0"
     },
     "denom":"pigs",
     "amount":"10",
     "name":"user1",
     "password":"12345678",
     "recipient":"'$(mpcli keys show user2 -a)'"
}'