diff --git a/src/status_im/ethereum/contracts.cljs b/src/status_im/ethereum/contracts.cljs index 8bb655f27f63..e9fa85af046a 100644 --- a/src/status_im/ethereum/contracts.cljs +++ b/src/status_im/ethereum/contracts.cljs @@ -8,7 +8,14 @@ :status/tribute-to-talk {:testnet "0xC61aa0287247a0398589a66fCD6146EC0F295432"} :status/stickers - {:testnet "0x39d16CdB56b5a6a89e1A397A13Fe48034694316E"}}) + {:testnet "0x8cc272396be7583c65bee82cd7b743c69a87287d" + :mainnet "0x0577215622f43a39f4bc9640806dfea9b10d2a36"} + :status/sticker-market + {:testnet "0x6CC7274aF9cE9572d22DFD8545Fb8c9C9Bcb48AD" + :mainnet "0x12824271339304d3a9f7e096e62a2a7e73b4a7e7"} + :status/sticker-pack + {:testnet "0xf852198d0385c4b871e0b91804ecd47c6ba97351" + :mainnet "0x110101156e8F0743948B2A61aFcf3994A8Fb172e"}}) (defn get-address [db contract] diff --git a/src/status_im/stickers/core.cljs b/src/status_im/stickers/core.cljs index b9a68ede0e8f..136dbc1f2212 100644 --- a/src/status_im/stickers/core.cljs +++ b/src/status_im/stickers/core.cljs @@ -64,21 +64,29 @@ (json-rpc/eth-call {:contract contract ;; Returns vector of owned tokens ids in the contract by address - :method "tokensOwnedBy(address)" + :method "balanceOf(address)" :params [address] - :outputs ["uint256[]"] + :outputs ["uint256"] :on-success - (fn [[tokens]] - (doseq [id tokens] + (fn [[count]] + (dotimes [id count] (json-rpc/eth-call {:contract contract ;; Returns pack id in the contract by token id - :method "tokenPackId(uint256)" - :params [id] + :method "tokenOfOwnerByIndex(address,uint256)" + :params [address id] :outputs ["uint256"] :on-success - (fn [[pack-id]] - (re-frame/dispatch [:stickers/pack-owned pack-id]))})))}))) + (fn [[token-id]] + (json-rpc/eth-call + {:contract contract + ;; Returns pack id in the contract by token id + :method "tokenPackId(uint256)" + :params [token-id] + :outputs ["uint256"] + :on-success + (fn [[pack-id]] + (re-frame/dispatch [:stickers/pack-owned pack-id]))}))})))}))) (fx/defn init-stickers-packs [{:keys [db]}] @@ -137,29 +145,30 @@ (fx/defn load-packs [{:keys [db]}] - (let [contract (contracts/get-address db :status/stickers) - address (ethereum/current-address db)] + (let [contract (contracts/get-address db :status/stickers) + pack-contract (contracts/get-address db :status/sticker-pack) + address (ethereum/current-address db)] (when contract - {:stickers/owned-packs-fx [contract address] + {:stickers/owned-packs-fx [pack-contract address] :stickers/load-packs-fx [contract]}))) (fx/defn approve-pack [{db :db :as cofx} pack-id price] - (let [address (ethereum/current-address db) - stickers-contract (contracts/get-address db :status/stickers) - snt-contract (contracts/get-address db :status/snt)] + (let [address (ethereum/current-address db) + sticker-market-contract (contracts/get-address db :status/sticker-market) + snt-contract (contracts/get-address db :status/snt)] (signing/eth-transaction-call cofx {:contract snt-contract :method "approveAndCall(address,uint256,bytes)" - :params [stickers-contract + :params [sticker-market-contract price - (abi-spec/encode "buyToken(uint256,address)" [pack-id address])] + (abi-spec/encode "buyToken(uint256,address,uint256)" [pack-id address price])] :on-result [:stickers/pending-pack pack-id]}))) (fx/defn pending-pack [{:keys [db] :as cofx} id] - (let [contract (contracts/get-address db :status/stickers) + (let [contract (contracts/get-address db :status/sticker-pack) address (ethereum/current-address db)] (when contract (fx/merge cofx @@ -171,7 +180,7 @@ (fx/defn pending-timeout [{{:stickers/keys [packs-pending packs-owned] :as db} :db}] (let [packs-diff (clojure.set/difference packs-pending packs-owned) - contract (contracts/get-address db :status/stickers) + contract (contracts/get-address db :status/sticker-pack) address (ethereum/current-address db)] (when contract (merge {:db (assoc db :stickers/packs-pending packs-diff)} @@ -184,7 +193,7 @@ (fx/defn get-owned-pack [{:keys [db]}] - (let [contract (contracts/get-address db :status/stickers) + (let [contract (contracts/get-address db :status/sticker-pack) address (ethereum/current-address db)] (when contract {:stickers/owned-packs-fx [contract address]})))