<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                --- 概述: 用Go檢查地址是智能合約或賬戶的教程。 --- # 地址檢查 本節將介紹如何確認一個地址并確定其是否為智能合約地址。 ## 檢查地址是否有效 我們可以使用簡單的正則表達式來檢查以太坊地址是否有效: We can use a simple regular expression to check if the ethereum address is valid: ```go re := regexp.MustCompile("^0x[0-9a-fA-F]{40}$") fmt.Printf("is valid: %v\n", re.MatchString("0x323b5d4c32345ced77393b3530b1eed0f346429d")) // is valid: true fmt.Printf("is valid: %v\n", re.MatchString("0xZYXb5d4c32345ced77393b3530b1eed0f346429d")) // is valid: false ``` ## 檢查地址是否為賬戶或智能合約 我們可以確定,若在該地址存儲了字節碼,該地址是智能合約。這是一個示例,在例子中,我們獲取一個代幣智能合約的字節碼并檢查其長度以驗證它是一個智能合約: ```go // 0x Protocol Token (ZRX) smart contract address address := common.HexToAddress("0xe41d2489571d322189246dafa5ebde1f4699f498") bytecode, err := client.CodeAt(context.Background(), address, nil) // nil is latest block if err != nil { log.Fatal(err) } isContract := len(bytecode) > 0 fmt.Printf("is contract: %v\n", isContract) // is contract: true ``` 當地址上沒有字節碼時,我們知道它不是一個智能合約,它是一個標準的以太坊賬戶。 ```go // a random user account address address := common.HexToAddress("0x8e215d06ea7ec1fdb4fc5fd21768f4b34ee92ef4") bytecode, err := client.CodeAt(context.Background(), address, nil) // nil is latest block if err != nil { log.Fatal(err) } isContract = len(bytecode) > 0 fmt.Printf("is contract: %v\n", isContract) // is contract: false ``` --- ### 完整代碼 ```go package main import ( "context" "fmt" "log" "regexp" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" ) func main() { re := regexp.MustCompile("^0x[0-9a-fA-F]{40}$") fmt.Printf("is valid: %v\n", re.MatchString("0x323b5d4c32345ced77393b3530b1eed0f346429d")) // is valid: true fmt.Printf("is valid: %v\n", re.MatchString("0xZYXb5d4c32345ced77393b3530b1eed0f346429d")) // is valid: false client, err := ethclient.Dial("https://mainnet.infura.io") if err != nil { log.Fatal(err) } // 0x Protocol Token (ZRX) smart contract address address := common.HexToAddress("0xe41d2489571d322189246dafa5ebde1f4699f498") bytecode, err := client.CodeAt(context.Background(), address, nil) // nil is latest block if err != nil { log.Fatal(err) } isContract := len(bytecode) > 0 fmt.Printf("is contract: %v\n", isContract) // is contract: true // a random user account address address = common.HexToAddress("0x8e215d06ea7ec1fdb4fc5fd21768f4b34ee92ef4") bytecode, err = client.CodeAt(context.Background(), address, nil) // nil is latest block if err != nil { log.Fatal(err) } isContract = len(bytecode) > 0 fmt.Printf("is contract: %v\n", isContract) // is contract: false } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看