Javascript

兩個地址可以有相同的排序值嗎?

  • May 21, 2021

uniswap 文件中它說:

token0
function token0() external view returns (address);
Returns the address of the pair token with the lower sort order.

token1
function token1() external view returns (address);
Returns the address of the pair token with the higher sort order.

據我了解,為了在javascript中比較它們,我需要將它們轉換為BigInt,即

let token0;
let token1;

const address0 = BigInt('0xDB17618B140EFCB8a07BC8e9b88920de1daE6C87');
const address1 = BigInt('0x4d4CC29b9C4E413CFe5f898E16280f11db57E186');

if (address0 < address1) {
 token0 = address0;
 token1 = address1;
} else {
 token0 = address1;
 token1 = address0;
}

兩個問題:

  1. 是否存在兩個不同地址具有相同排序值的情況?
  2. 如果是,那麼我應該使用<=還是<在這裡?

是否存在兩個不同地址具有相同排序值的情況?

每個地址都必須是唯一的。每個地址都是一個 20 字節的數字。因此唯一的數字。

(如果您擔心校驗和 - 即各個地方的大小寫 - 這仍然不會影響基礎價值。)

Uniswap Factory 合約以相同的方式進行比較:

function createPair(address tokenA, address tokenB) external returns (address pair) {
   require(tokenA != tokenB, 'UniswapV2: IDENTICAL_ADDRESSES');
--> (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
   require(token0 != address(0), 'UniswapV2: ZERO_ADDRESS');
   ...

引用自:https://ethereum.stackexchange.com/questions/99421