Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

文档中智能路由的正确使用方式 #603

Open
Lior-618 opened this issue Jan 25, 2025 · 2 comments
Open

文档中智能路由的正确使用方式 #603

Lior-618 opened this issue Jan 25, 2025 · 2 comments

Comments

@Lior-618
Copy link

https://docs-zh.sun.io/kai-fa-zhe/dui-huan/zhi-neng-lu-you

Image
这里的api 应该是哪个?

Image
相邻的poolversion数组 这个怎么计算?

@Lior-618 Lior-618 changed the title 文档中智能路由的争取使用方式 文档中智能路由的正确使用方式 Jan 25, 2025
@ferdinand026
Copy link

@Lior-618 The first parameter of tronweb.contract is the contract abi, for the contract issues, maybe you can find sun support team for help on their website.

@lio889
Copy link

lio889 commented Feb 6, 2025

相邻的poolversion数组计算,RouterInfo是智能路由解算服务请求的返回体数组对象,你看看对不对
public static PoolVersionResult calculatePoolVersion(RouterInfo routerInfo) {
List tokens = routerInfo.getTokens();
List poolVersions = routerInfo.getPoolVersions();

    // 压缩后的 poolVersions(去除连续重复的版本)
    List<String> compressedPoolVersions = new ArrayList<>();
    // 每个分组对应的 token 数量
    List<Integer> versionLen = new ArrayList<>();

    if (tokens == null || poolVersions == null || tokens.size() < 2 || poolVersions.size() < 1) {
        throw new IllegalArgumentException("Invalid tokens or poolVersions input.");
    }

    // 压缩 poolVersions:连续相同的版本只保留一个
    String lastVersion = null;
    for (String version : poolVersions) {
        if (!version.equals(lastVersion)) {
            compressedPoolVersions.add(version);
            lastVersion = version;
        }
    }

    // 计算 versionLen
    // pointer 用于遍历原始的 poolVersions 数组
    int pointer = 0;
    for (int i = 0; i < compressedPoolVersions.size(); i++) {
        String version = compressedPoolVersions.get(i);
        int count = 0;
        // 计算连续该版本的出现次数
        while (pointer < poolVersions.size() && poolVersions.get(pointer).equals(version)) {
            count++;
            pointer++;
        }
        // 每组的初始 token 数量 = count + 1(兑换池数量+1)
        // 但对于后续分组,前后分组共享一个边界 token,因此 versionLen 需减 1
        if (i == 0) {
            versionLen.add(count + 1);
        } else {
            versionLen.add(count);  // 等价于 (count + 1) - 1
        }
    }

    // 可选:验证所有分段 token 数量累加后是否与 tokens 数量匹配
    int totalTokens = 0;
    for (Integer len : versionLen) {
        totalTokens += len;
    }
    if (totalTokens != tokens.size()) {
        throw new IllegalStateException("Calculated versionLen total (" + totalTokens
                + ") does not match tokens size (" + tokens.size() + ").");
    }

    return new PoolVersionResult(compressedPoolVersions, versionLen);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants