ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MetaMask Docs (Methods &&Events)
    블록체인 2023. 3. 24. 17:37

    MetaMask Docs

    1. ethereum.isConnected() 

    ethereum.isConnected(): boolean;
    /**
    If the provider is not connected, the page will have to be reloaded in order for connection to be re-established. 
    Please see the connect and disconnect events for more information.
    */

    2. ethereum.request(args) 

    interface RequestArguments {
      method: string;
      params?: unknown[] | object;
      			//The params and return value will vary by RPC method. 
                //If a method has any params, they are almost always of type Array<any>.
    }
    
    ethereum.request(args: RequestArguments): Promise<unknown>;
    
    // Metamask는 가장 기본적인 이더리움 RPC 메서드를 지원함. 다른 지갑에서는 지원하지 않는
    // https://docs.metamask.io/guide/rpc-api.html 여기에서 메타마스크 디테일 확인

    eg) 

    params: [
      {
        from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
        to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
        gas: '0x76c0', // 30400
        gasPrice: '0x9184e72a000', // 10000000000000
        value: '0x9184e72a', // 2441406250
        data:
          '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675',
      },
    ];
    
    
    ethereum
      .request({
        method: 'eth_sendTransaction',
        params,
      })
      .then((result) => {
        // This method will return a transaction hash hexadecimal string on success.
      })
      .catch((error) => {
        // If the request fails, the Promise will reject with an error.
      });

    3. Event 

    interface ConnectInfo {
      chainId: string;
    }
    
    interface ProviderMessage {
      type: string;
      data: unknown;
    }
    
    ethereum.on('message', handler: (message: ProviderMessage) => void);
    	// 메시지의 종류는 type 에 의해 분류됨
        
    
    ethereum.on('accountsChanged', (accounts) => {
      	// "accounts" 는 배열이거나 비었음
        // 가장 최근에 사용된 계정의 주소를 리턴함
    });
    
    ethereum.on('chainChanged', (chainId) => {
      	// 합당한 이유 있는거 아니면 window.location.reload() 를 수행하길 추천함
        // All RPC requests are submitted to the currently connected chain. 
        // Therefore, it's critical to keep track of the current chain ID by listening for this event.
    });
    
    ethereum.on('connect', handler: (connectInfo: ConnectInfo) => void);
    	//ethereum.isConnected() 메서드를 수행하는 것보다 connect를 더 추천함 
    
    ethereum.on('disconnect', handler: (error: ProviderRpcError) => void);
    
    
    ethereum.removeListener('accountsChanged', handleAccountsChanged);
    	// 리스닝 끝났다면 listeners 제거하는거 잊지말아라 
    	// 두번째 인자로 오는 함수는 ethereum.on 에 대한 event 를 다루는 함수 이름과 같아야함.

     

    4. Error 

    interface ProviderRpcError extends Error {
      message: string;
      code: number;
      data?: unknown;
    }
    
    	// 4001: user에 의해 req가 거절됨
    	//-32602: 파라미터가 유효하지 않음
    	//-32603: 내부 에러

     

    '블록체인' 카테고리의 다른 글

    [블록체인] 용어 정리 (ing)  (1) 2023.03.13
    [블록체인] Ether.js provider, signer  (0) 2023.03.13
    [블록체인] Web3.js vs Ether.js  (0) 2023.03.13
Designed by Tistory.