token::index<Token>(object::object_from_constructor_ref(&token_cref));
// 如果/当需要访问创建它的交易中的代币索引,
// 以设置额外的特定于应用程序的字段,才需要添加此方法。
//
// 此方法允许并行铸造,使其高效。
// fun index_snapshot<T: key>(token: &Object<T>): AggregatorSnapshot<u64> acquires Token, TokenIdentifiers {
//     let token_address = object::object_address(token);
//     if (exists<TokenIdentifiers>(token_address)) {
//         aggregator_v2::copy_snapshot(&borrow_global<TokenIdentifiers>(token_address).index)
//     } else {
//         aggregator_v2::create_snapshot(borrow(token).index)
//     }
// }

// 避免在代币被铸造的同一交易中使用此方法,
// 因为这将禁止并行执行交易。
#[view]
public fun index<T: key>(token: Object<T>): u64 acquires Token, TokenIdentifiers {
    let token_address = object::object_address(&token);
    // 检查 `token_address` 是否存在于 `TokenIdentifiers` 资源中:
    if (exists<TokenIdentifiers>(token_address)) {
        aggregator_v2::read_snapshot(&borrow_global<TokenIdentifiers>(token_address).index)
    } else {
        borrow(&token).index
    }
}