Sort API를 사용하여 Uniswap 거래에서 거래 분석

Uniswap 계약 및 계약 이면의 메커니즘은 interesting contract to study입니다. 모든 것을 다루지는 않겠지만Uniswap contracts 트랜잭션이 어떻게 작동하는지, 트랜잭션을 완료하기 위해 교환된 다양한 코인을 시각화하는 방법만 살펴보겠습니다.

관심 있는 계약 주소부터 시작하겠습니다: 0x7a250d5630b4cf539739df2c5dacb4c659f2488d

Sort API을 사용하여 몇 가지 샘플 Uniswap 거래를 살펴보고 무엇을 배울 수 있는지 살펴보겠습니다.

POST https://api.sort.xyz/v0/transaction/


신체:

{
  "contract_address" : "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
  "limit": 5
}


위의 API 호출은 날짜 내림차순으로 정렬된 최근 5개의 Uniswap 트랜잭션을 반환합니다. 트랜잭션에는 5가지 기본 Uniswap 거래 기능이 있음을 알 수 있습니다.
  • swapExactTokensForTokens
  • swapExactETHForTokens
  • swapExactTokensForETH
  • swapTokensForExactTokens
  • 스왑ETHForExactTokens

  • 'swapExactTokensForTokens'에 집중하고 API call을 수정해 보겠습니다.

    POST https://api.sort.xyz/v0/transaction/
    


    신체:

    {
      "contract_address" : "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
      "contract_function" : "swapExactTokensForTokens",
      "limit": 10
    }
    


    이 트랜잭션을 살펴보겠습니다(트랜잭션 해시에 대해 this link에 액세스하여 웹 브라우저에서 따라갈 수 있음).

    0xb5f32cd7524fc4f33fd656625bb98dfed5d1396f9c6580b82a9501a89c5569f5
    


    View transaction information :

    GET https://api.sort.xyz/v0/transaction/0xb5f32cd7524fc4f33fd656625bb98dfed5d1396f9c6580b82a9501a89c5569f5
    


    가장 먼저 살펴볼 것은 함수 이름과 함수에 전달된 매개변수입니다. 이는 최상위 수준의 "함수"필드에 있습니다.

    "function": {
      "name": "swapExactTokensForTokens",
      "params": [
          {
              "name": "amountIn",
              "value": "100000000000000000000",
              "type": "uint256"
          },
          {
              "name": "amountOutMin",
              "value": "37541924376765909332716544",
              "type": "uint256"
          },
          {
              "name": "path",
              "value": [
                  {
                      "raw": "0xb1191f691a355b43542bea9b8847bc73e7abb137",
                      "name": "Kirobo",
                      "symbol": "KIRO"
                  },
                  {
                      "raw": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                      "name": "ETH",
                      "symbol": "ETH"
                  },
                  {
                      "raw": "0x1c7e83f8c581a967940dbfa7984744646ae46b29",
                      "name": "random",
                      "symbol": "RND"
                  }
              ],
              "type": "address[]"
          },
          {
              "name": "to",
              "value": "0xeb9fbacfac3dceded5dc45daa3b319a9a1593dc7",
              "type": "address"
          },
          {
              "name": "deadline",
              "value": "1647875834",
              "type": "uint256"
          }
      ]
    }
    


    함수 호출을 보면 요청 중인 트랜잭션에 대한 아이디어를 얻을 수 있습니다.
  • "100000000000000000000"KIRO 토큰을 "37541924376765909332716544"RND 토큰으로 교환합니다(계약 값을 기준으로 X 소수 자릿수로 이동하지 않았기 때문에 숫자가 매우 커 보입니다)

  • 이제 실제로 무슨 일이 일어났는지 로그를 살펴보겠습니다. 로그는 최상위 "logs"필드에서 찾을 수 있습니다.

    "logs": {
      "functions": [
          {
              "name": "Transfer",
              "type": "event",
              "params": [
                  {
                      "value": "0xeb9fbacfac3dceded5dc45daa3b319a9a1593dc7",
                      "name": "from",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "0x5cd136e8197be513b06d39730dc674b1e0f6b7da",
                      "name": "to",
                      "symbol": "UNI-V2",
                      "type": "address"
                  },
                  {
                      "value": "100000000000000000000",
                      "type": "uint256",
                      "name": "value"
                  }
              ],
              "function_address": {
                  "value": "0xb1191f691a355b43542bea9b8847bc73e7abb137",
                  "name": "Kirobo",
                  "symbol": "KIRO"
              }
          },
          {
              "name": "Approval",
              "type": "event",
              "params": [
                  {
                      "value": "0xeb9fbacfac3dceded5dc45daa3b319a9a1593dc7",
                      "name": "owner",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
                      "name": "spender",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "115792089237316195423570985008687907853269984665640564039357584007913129639935",
                      "type": "uint256",
                      "name": "value"
                  }
              ],
              "function_address": {
                  "value": "0xb1191f691a355b43542bea9b8847bc73e7abb137",
                  "name": "Kirobo",
                  "symbol": "KIRO"
              }
          },
          {
              "name": "Transfer",
              "type": "event",
              "params": [
                  {
                      "value": "0x5cd136e8197be513b06d39730dc674b1e0f6b7da",
                      "name": "src",
                      "symbol": "UNI-V2",
                      "type": "address"
                  },
                  {
                      "value": "0x5449bd1a97296125252db2d9cf23d5d6e30ca3c1",
                      "name": "dst",
                      "symbol": "UNI-V2",
                      "type": "address"
                  },
                  {
                      "value": "4305548873194210",
                      "type": "uint256",
                      "name": "wad"
                  }
              ],
              "function_address": {
                  "value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                  "name": "ETH",
                  "symbol": "ETH"
              }
          },
          {
              "name": "Sync",
              "type": "event",
              "params": [
                  {
                      "value": "5340477822266522423654997",
                      "type": "uint112",
                      "name": "reserve0"
                  },
                  {
                      "value": "230624450502417018204",
                      "type": "uint112",
                      "name": "reserve1"
                  }
              ],
              "function_address": {
                  "value": "0x5cd136e8197be513b06d39730dc674b1e0f6b7da",
                  "name": "Uniswap V2",
                  "symbol": "UNI-V2"
              }
          },
          {
              "name": "Swap",
              "type": "event",
              "params": [
                  {
                      "value": "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
                      "name": "sender",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "100000000000000000000",
                      "type": "uint256",
                      "name": "amount0In"
                  },
                  {
                      "value": "0",
                      "type": "uint256",
                      "name": "amount1In"
                  },
                  {
                      "value": "0",
                      "type": "uint256",
                      "name": "amount0Out"
                  },
                  {
                      "value": "4305548873194210",
                      "type": "uint256",
                      "name": "amount1Out"
                  },
                  {
                      "value": "0x5449bd1a97296125252db2d9cf23d5d6e30ca3c1",
                      "name": "to",
                      "symbol": "UNI-V2",
                      "type": "address"
                  }
              ],
              "function_address": {
                  "value": "0x5cd136e8197be513b06d39730dc674b1e0f6b7da",
                  "name": "Uniswap V2",
                  "symbol": "UNI-V2"
              }
          },
          {
              "name": "Transfer",
              "type": "event",
              "params": [
                  {
                      "value": "0x5449bd1a97296125252db2d9cf23d5d6e30ca3c1",
                      "name": "from",
                      "symbol": "UNI-V2",
                      "type": "address"
                  },
                  {
                      "value": "0xeb9fbacfac3dceded5dc45daa3b319a9a1593dc7",
                      "name": "to",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "37579466301142675242049261",
                      "type": "uint256",
                      "name": "value"
                  }
              ],
              "function_address": {
                  "value": "0x1c7e83f8c581a967940dbfa7984744646ae46b29",
                  "name": "random",
                  "symbol": "RND"
              }
          },
          {
              "name": "Sync",
              "type": "event",
              "params": [
                  {
                      "value": "18139246877011718508631881984",
                      "type": "uint112",
                      "name": "reserve0"
                  },
                  {
                      "value": "2076317830422973219",
                      "type": "uint112",
                      "name": "reserve1"
                  }
              ],
              "function_address": {
                  "value": "0x5449bd1a97296125252db2d9cf23d5d6e30ca3c1",
                  "name": "Uniswap V2",
                  "symbol": "UNI-V2"
              }
          },
          {
              "name": "Swap",
              "type": "event",
              "params": [
                  {
                      "value": "0x7a250d5630b4cf539739df2c5dacb4c659f2488d",
                      "name": "sender",
                      "symbol": null,
                      "type": "address"
                  },
                  {
                      "value": "0",
                      "type": "uint256",
                      "name": "amount0In"
                  },
                  {
                      "value": "4305548873194210",
                      "type": "uint256",
                      "name": "amount1In"
                  },
                  {
                      "value": "37579466301142675242049261",
                      "type": "uint256",
                      "name": "amount0Out"
                  },
                  {
                      "value": "0",
                      "type": "uint256",
                      "name": "amount1Out"
                  },
                  {
                      "value": "0xeb9fbacfac3dceded5dc45daa3b319a9a1593dc7",
                      "name": "to",
                      "symbol": null,
                      "type": "address"
                  }
              ],
              "function_address": {
                  "value": "0x5449bd1a97296125252db2d9cf23d5d6e30ca3c1",
                  "name": "Uniswap V2",
                  "symbol": "UNI-V2"
              }
          }
      ],
      "num_logs": 8,
      "status": 1
    }
    


    몇 가지 참고 사항:
  • "상태"필드는 1 또는 0이며 트랜잭션의 성공 여부를 알려줍니다.
  • "function_address"필드는 함수가 실행된 계약을 알려줍니다.

  • 8개의 함수 호출을 볼 수 있습니다. 이니시에이터에서 컨트랙트로 "KIRO"를 전송(이전/승인)한 다음 "KIRO"에서 "ETH"로 스왑한 다음 "ETH"에서 "RND"로 최종 스왑합니다. 그런 다음 "RND"는 요청 개시자에게 다시 전송됩니다.

    각 기능을 자세히 살펴보는 데 더 많은 시간을 할애할 수 있습니다. 이 자습서는 트랜잭션을 살펴보고 Sort API 을 사용하는 데 도움이 되는 입문서입니다.

    Discord 에 더 많은 질문을 하거나 Sort API documentation 로 계속 진행하십시오.

    좋은 웹페이지 즐겨찾기