| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- <template>
- <view>
-
- </view>
- </template>
- <script setup>
- import { ref } from 'vue'
-
-
- import {
- toRefs,
- toRaw
- } from 'vue';
- import {
- arbitrum,
- mainnet
- } from '@wagmi/core/chains'
- import {
- createWeb3Modal,
- useWeb3Modal,
- useWeb3ModalEvents,
- useWeb3ModalState,
- useWeb3ModalTheme
- } from '@web3modal/wagmi/vue'
-
- import {
- chains,
- projectId,
- wagmiConfig
- } from "../../unit/config.js"
-
-
- // 3. Create modal
- createWeb3Modal({
- wagmiConfig,
- projectId,
- chains,
- themeMode: 'light'
- })
-
- import {
- useAccount,
- useBalance,
- useDisconnect,
- useReadContract,
- useSignMessage,
- useWriteContract
- } from "@wagmi/vue";
- import ERC20 from '../../contract/abi/ERC20.json'
- import {
- ChainId,
- USDT_ADDRESS
- } from "@/contract/address";
- import {
- formatUnits,
- parseUnits
- } from "viem";
-
- const {
- signMessageAsync
- } = useSignMessage()
-
-
- const {
- disconnect
- } = useDisconnect()
- // 4. Use modal composable 。
- // 注意在使用“useWeb3Mode”compositable之前,请调用“createWeb3Model”
- const modal = useWeb3Modal()
- const {
- address,
- chainId,
- isConnected
- } = useAccount()
-
- // 获取原生代币余额
- // const {
- // data
- // } = useBalance({
- // address: address?.value// '0x9e4caaf0525eeb2F92Ab985AacC14B9C8BcfDB82'
- // })
- // const balance = toRaw(data._object).datat && toRaw(data._object).data.formatted
- // console.log("balance:",balance);
- //const blance2 = balance["_object"]
- //console.log("blance2 --- ",JSON.parse(JSON.stringify(balance)));
-
- const {
- data: balance
- } = useBalance({
- address: address?.value
- })
- const balanceData = balance.value;
- console.log("Balance value:", formatUnits(balanceData.value, 18));
-
- if (balanceData) {
- console.log("Balance object:", balanceData);
- const balanceFormatted = balanceData?.formatted || 'undefined';
- const balanceSymbol = balanceData?.symbol || 'undefined';
- const balanceValue = formatUnits(balanceData.value, 18);
-
- console.log("Balance formatted:", balanceFormatted);
- console.log("Balance symbol:", balanceSymbol);
- console.log("Balance value:", balanceValue);
- } else {
- console.log("Balance data is not available.");
- }
-
- //签名
- async function sign() {
- const signature = await signMessageAsync({
- message: 'gm wagmi frens'
- })
- console.log(signature)
- }
-
- //测试签名登录
- async function signLogin() {
- if (!address) {
- await modal.open();
- }
- console.log("Connected address:", address);
- const userAddress = address.value;
- console.log("userAddress:", userAddress)
- const message = `Login request from ${userAddress}`;
- const signature = await signMessageAsync({
- message
- });
-
- // Send signature and account to backend
- // const response = await axios.post('http://192.168.0.113:30001/ms_dev/program/getLoginToken', {
- // address: address,
- // signature: signature,
- // message: message
- // });
- const params = {
- address: userAddress,
- signature: signature,
- message: message
- }
- uni.request({
- url: "http://127.0.0.1:30001/ms_dev/program/getLoginToken",
- data: params,
- method: "POST",
- header: {
- "Content-Type": "application/json",
- },
- success: function(res) {
- if (res.statusCode == 200) {
- let data = res.data;
- console.log("res:", data);
- const token = data.token;
- console.log(token)
- } else {
- console.error("Error:", res)
- }
- },
- fail: function(e) {
- console.error("Failed:", e)
- }
- })
-
- }
-
- // function getBalance(){
- // console.log(isConnected.value,chainId.value,address.value)
- // // 读取合约数据
- // const usdtBalance = useReadContract({
- // abi:ERC20,
- // address: USDT_ADDRESS[chainId.value],
- // functionName: 'balanceOf',
- // args: [address.value],
- // })
- // console.log(usdtBalance)
- // }
-
-
- // 获取 USDT 余额
- const {
- data: usdtBalance
- } = useReadContract({
- abi: ERC20,
- address: USDT_ADDRESS[ChainId.MATCH],
- functionName: 'balanceOf',
- args: [address],
- })
- // 获取 USDT授权某个合约额度 直接转账transfer不需要授权 调用合约扣除自己代币的需要先授权
- // 授权方法 approve 参数 合约地址 数量(一般MaxUint256)具体看 abi erc20
- // export const MaxUint256: bigint = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
- const {
- data: allowance
- } = useReadContract({
- abi: ERC20,
- address: USDT_ADDRESS[ChainId.MATCH],
- functionName: 'allowance',
- //自己地址 合约地址
- args: [address, address],
- })
- const {
- writeContractAsync
- } = useWriteContract()
-
- async function transfer() {
- //转给谁
- const to = "0x4AB39A1B4861b1F2996C6104ee0ED67A31cf26a8"; // "0xa5f99C0E7D0C7A35D27b6F8E9881F2c9E32A937D"
- //转多少 这里以 1 个 USDT 举例 因为区块链没有小数 USDT 的代币精度是 18 1个 USDT 在区块链上表示为 1*10**18
- const value = parseUnits("0.01", 18) //库封装了方法
- const res = await writeContractAsync({
- abi: ERC20,
- address: USDT_ADDRESS[ChainId.MATCH],
- functionName: 'transfer',
- args: [
- to,
- value
- ],
- })
- console.log(res)
-
- //transferFrom
- // const from = "0x4AB39A1B4861b1F2996C6104ee0ED67A31cf26a8";
- // const res2 = await writeContractAsync({
- // abi: ERC20,
- // address: USDT_ADDRESS[ChainId.BSC],
- // functionName: 'transferFrom',
- // args: [
- // from,
- // to,
- // value
- // ],
- // })
- // console.log(res2)
- }
-
- //uniapp 页面钩子
- import {
- onLoad,
- onShow
- } from "@dcloudio/uni-app";
-
- // onLoad 接受 A 页面传递的参数
- onLoad((option) => {
- console.log("index 页面 onLoad:", option); //B 页面 onLoad: {id: '1', name: 'uniapp'}
- });
-
- onShow(() => {
- console.log("index 页面 onShow");
- });
- </script>
- <style>
-
- </style>
|