Как инициировать транзакцию изменения состояния для смарт-контракта в блокчейне alfajores / celo, используя wallet-connect-dapp, celo / contractkit в reactnative

#react-native #blockchain #web3 #abi #wallet-connect

#react-native #блокчейн #web3 #abi #кошелек-подключение

Вопрос:

Я могу подключить свое простое приложение react-native dapp к мобильному кошельку alfjores, используя «@walletconnect / react-native-dapp»: «^ 1.6.6».

завернул мое приложение () в App.js с WalletConnectProvider, который использует React-context

 export default withWalletConnect(App, {
  redirectUrl:
    Platform.OS === 'web' ? window.location.origin : 'app://WalletHomeScreen',
  storageOptions: {
    asyncStorage: AsyncStorage,
  },
  rpc: {
    44787: "https://alfajores-forno.celo-testnet.org",
    42220: "https://forno.celo.org",
  },
})
 

Затем я использовал хук useWalletConnect() для запуска .connect() и .killsession() для входа / выхода из системы с использованием глубоких ссылок.

 import { useWalletConnect } from '@walletconnect/react-native-dapp';
const connector = useWalletConnect();
I used it as:
connector.connect()     [function]
connector.killSession() [function]
connector.connected     [bool]
connector.accounts[0]   [string]
 

Вызовы чтения для alfajores-forno прошли успешно, но транзакции записи (изменения состояния) — это именно моя проблема.

Я думаю, что я не могу предоставить данные walletconnect для web3 или kit.

Я перепробовал почти все из документов: walletconnect celo walletconnect-celo и некоторые другие…

Какой код я использую или использовал:

 //ABI are from the Factory.sol and Project.sol smart contract deployed on alfajores.
import { Factory_ABI, Project_ABI } from "../ABI";

import {projectContractBytecode} from "../bytecode";
import Web3 from 'web3';
import { newKitFromWeb3 } from '@celo/contractkit';


const contractAddress = "0x0f9Dd41f1c1b1b72808f791A83518dDF0c1aC17f";
const web3 = new Web3("https://alfajores-forno.celo-testnet.org");
const kit = newKitFromWeb3(web3);
const FactoryContract = new kit.connection.web3.eth.Contract(Factory_ABI, contractAddress);

//read-successful.
const projectList = await FactoryContract.methods.getAllDeployedProjects().call();


//write-errors.
const txo = await FactoryContract.methods.createProject(name, symbol, initialSupply);
const data = txo.encodeABI();

const tx = await kit.connection.sendTransactionObject({txo, from: connector.accounts[0]})
OR
const tx = await kit.connection.sendTransactionObject(txo, {from: 0xe2c7618d0f07578cad8de5c05d5cbc3382b04fcd});

and some pnc.
 

Я попытался использовать connector в web3 следующим образом:

 
const connector = useWalletConnect();
const web3 = new Web3(connector);
 

Но это тоже, похоже, не работает.