diff --git a/src/status_im/extensions/core.cljs b/src/status_im/extensions/core.cljs index 59c21bc2f7..d5cc22e7bb 100644 --- a/src/status_im/extensions/core.cljs +++ b/src/status_im/extensions/core.cljs @@ -556,6 +556,81 @@ {:permissions [:read] :value :extensions/ethereum-cancel-filter :arguments {:id :string}} + 'ethereum.erc20/total-supply + {:permissions [:read] + :value :extensions/ethereum-erc20-total-supply + :arguments {:contract :string + :on-result :event}} + 'ethereum.erc20/balance-of + {:permissions [:read] + :value :extensions/ethereum-erc20-balance-of + :arguments {:contract :string + :token-owner :string + :on-result :event}} + 'ethereum.erc20/transfer + {:permissions [:read] + :value :extensions/ethereum-erc20-transfer + :arguments {:contract :string + :to :string + :value :number + :on-result :event}} + 'ethereum.erc20/transfer-from + {:permissions [:read] + :value :extensions/ethereum-erc20-transfer-from + :arguments {:contract :string + :from :string + :to :string + :value :number + :on-result :event}} + 'ethereum.erc20/approve + {:permissions [:read] + :value :extensions/ethereum-erc20-approve + :arguments {:contract :string + :spender :string + :value :number + :on-result :event}} + 'ethereum.erc20/allowance + {:permissions [:read] + :value :extensions/ethereum-erc20-allowance + :arguments {:contract :string + :token-owner :string + :spender :string + :on-result :event}} + 'ethereum.erc721/owner-of + {:permissions [:read] + :value :extensions/ethereum-erc721-owner-of + :arguments {:contract :string + :token-id :string + :on-result :event}} + 'ethereum.erc721/is-approved-for-all + {:permissions [:read] + :value :extensions/ethereum-erc721-is-approved-for-all + :arguments {:contract :string + :owner :string + :operator :string + :on-result :event}} + 'ethereum.erc721/get-approved + {:permissions [:read] + :value :extensions/ethereum-erc721-get-approved + :arguments {:contract :string + :token-id :string + :on-result :event}} + 'ethereum.erc721/set-approval-for-all + {:permissions [:read] + :value :extensions/ethereum-erc721-set-approval-for-all + :arguments {:contract :string + :operator :string + :approved :boolean + :on-result :event}} + 'ethereum.erc721/safe-transfer-from + {:permissions [:read] + :value :extensions/ethereum-erc721-safe-transfer-from + :arguments {:contract :string + :from :string + :to :string + :token-id :string + :data? :string + :on-result :event}} 'ethereum/call {:permissions [:read] :value :extensions/ethereum-call diff --git a/src/status_im/extensions/ethereum.cljs b/src/status_im/extensions/ethereum.cljs index 3643dd9ad7..082e008fa7 100644 --- a/src/status_im/extensions/ethereum.cljs +++ b/src/status_im/extensions/ethereum.cljs @@ -101,6 +101,114 @@ (fn [{db :db} [_ _ {:keys [to] :as arguments}]] (wrap-with-resolution db arguments :to execute-ethcall))) +(handlers/register-handler-fx + :extensions/ethereum-erc20-total-supply + (fn [{db :db} [_ _ {:keys [contract on-result]}]] + (let [json-rpc-args {:to contract + :method "totalSupply()" + :outputs ["uint256"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc20-balance-of + (fn [{db :db} [_ _ {:keys [contract token-owner on-result]}]] + (let [json-rpc-args {:to contract + :method "balanceOf(address)" + :params [token-owner] + :outputs ["uint256"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc20-allowance + (fn [{db :db} [_ _ {:keys [contract token-owner spender on-result]}]] + (let [json-rpc-args {:to contract + :method "allowance(address,address)" + :params [token-owner spender] + :outputs ["uint256"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc20-transfer + (fn [{db :db} [_ _ {:keys [contract to value on-result]}]] + (let [json-rpc-args {:to contract + :method "transfer(address,uint256)" + :params [to value] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-send-transaction)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc20-transfer-from + (fn [{db :db} [_ _ {:keys [contract from to value on-result]}]] + (let [json-rpc-args {:to contract + :method "transferFrom(address,address,uint256)" + :params [from to value] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-send-transaction)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc20-approve + (fn [{db :db} [_ _ {:keys [contract spender value on-result]}]] + (let [json-rpc-args {:to contract + :method "approve(address,uint256)" + :params [spender value] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-send-transaction)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc721-owner-of + (fn [{db :db} [_ _ {:keys [contract token-id on-result]}]] + (let [json-rpc-args {:to contract + :method "ownerOf(uint256)" + :params [token-id] + :outputs ["address"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc721-is-approved-for-all + (fn [{db :db} [_ _ {:keys [contract owner operator on-result]}]] + (let [json-rpc-args {:to contract + :method "isApprovedForAll(address,address)" + :params [owner operator] + :outputs ["bool"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc721-get-approved + (fn [{db :db} [_ _ {:keys [contract token-id on-result]}]] + (let [json-rpc-args {:to contract + :method "getApproved(uint256)" + :params [token-id] + :outputs ["address"] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-ethcall)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc721-set-approval-for-all + (fn [{db :db} [_ _ {:keys [contract to approved on-result]}]] + (let [json-rpc-args {:to contract + :method "setApprovalForAll(address,bool)" + :params [to approved] + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-send-transaction)))) + +(handlers/register-handler-fx + :extensions/ethereum-erc721-safe-transfer-from + (fn [{db :db} [_ _ {:keys [contract from to token-id data on-result]}]] + (let [json-rpc-args {:to contract + :method (if data + "safeTransferFrom(address,address,uint256,bytes)" + "safeTransferFrom(address,address,uint256)") + :params (if data + [from to token-id data] + [from to token-id]) + :on-result on-result}] + (wrap-with-resolution db json-rpc-args :to execute-send-transaction)))) + (defn- parse-log [{:keys [address transactionHash blockHash transactionIndex topics blockNumber logIndex removed data]}] {:address address :transaction-hash transactionHash