委托管理器
## 引入赌注池
赌注池被定义为自定义委托智能合约、相关节点和参与者在池中下注的资金。节点运营商可能希望为他们的节点建立一个赌注池,然后任何人都可以出资换取一定比例的验证者奖励。这种为验证者出资的形式被称为授权。
赌注池弥合了需要资金来为其节点下注的节点运营商与希望通过下注其资金来赚取回报但对管理验证器节点不感兴趣的基金持有人之间的差距。
节点操作员可以建立一个堆栈池来管理一个或多个验证器节点。为此,他们可以使用Elrond协议中内置的委托管理器来创建他们自己的委托合约。委托合约使管理赌注池所需的某些任务自动化,例如跟踪为赌注池提供资金的每个账户,跟踪节点本身,以及向委托人提供信息。
重要
桩池需要 1250 个 EGLD,由节点运营商在创建时存放。然而,需要 2500 EGLD 来下注一个验证节点并开始获得奖励。
本页描述如何从委托管理器请求新的委托合约以及如何使用它。它将更多地关注委托合约而不是委托管理器,但是这两个概念是紧密联系的。然而,重要的是要记住,是委托合约处理赌注池和与之相关的节点。
请注意,委托管理器不需要设置赌注池。例如,也可以使用常规智能合约来设置委托,尽管这是一个更复杂的过程,这里不讨论。
节点操作员也可以选择设置委托仪表板,尽管他们可以使用任何用户界面或根本不使用。例如,这种委托仪表板的样板文件可以在这里找到:https://github . com/elrond network/delegation-dashboard . elrond . com。或者,旧的样板文件位于此处:https://github . com/ElrondNetwork/starter-dapp/tree/master/react-delegationdashboard。
委托流程的详细描述可查阅https://github . com/elrond network/elrond-specs/blob/main/sc-delegation-specs . MD。
创建新的委托合约
可以通过向委托管理器发出请求来创建新的桩池的委托合约。这通过提交以下形式的交易来完成:
NewDelegationContractTransaction {
Sender: <account address of the node operator>
Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6
Value: 1250000000000000000000 (1250 EGLD)
GasLimit: 60000000
Data: "createNewDelegationContract" +
"@" + <total delegation cap in EGLD, fully denominated, in hexadecimal encoding> +
"@" + <service fee as hundredths of percents, in hexadecimal encoding>
}
关于参数如何编码的更多细节,点击这里。
将Receiver
地址设置为erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6
,这是委托管理器的固定地址,位于元链上。
Value
设置为 1250 EGLD,将自动添加到新创建的委托合约的资金中,即这是赌注池中 EGLD 的初始金额。这部分 EGLD 总是属于委托合约的所有者。
重要
最初的 1250 EGLD 计入总授权上限,就像赌注池中的所有基金一样。
添加到池中的初始数量 1250 EGLD 使所有者成为赌注池的第一个委托人。这意味着所有者也有权获得一定比例的奖励,可以像任何其他委托人一样索取。
在Data field
中,传递给createNewDelegationContract
的第一个参数是总委托上限(赌注池的最大可能大小)。它被表示为 EGLD 的完全计价金额,意思是它是10完全命名的总授权上限必须以十六进制编码。确保不要对代表总委托上限的 ASCII 字符串进行编码。
提示
例如,要获得 7231.941 EGLD 的全计价形式,金额必须乘以10不对 ASCII 字符串"7231941000000000000000"
进行编码,而是对整数 72319410000000000000 本身进行编码。这将导致"01880b57b708cf408000"
。
将总委托上限设置为 0(十六进制的“00”)指定无限制的总委托量。以后总是可以修改(参见授权上限)。
传递给createNewDelegationContract
的第二个参数是将保留给委托合约所有者的服务费。它被计算为由验证器节点获得的总奖励的一部分。除此比例之外的剩余奖励将可供授权人申请或重新授权。服务费以百分之一表示。
提示
比如 37.45%的服务费,用整数 3745 表示。这个整数必须进行十六进制编码(3745 变成"0ea1"
)。
将服务费设置为 0 ( "00"
十六进制)指定不为委托合约的所有者保留任何奖励-所有奖励都将提供给委托者。服务费可以随时修改(见服务费)。
以下是请求创建新委托合约的交易的完整示例:
NewDelegationContractTransaction {
Sender: <account address of the node operator>
Receiver: erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6
Value: 1250000000000000000000
GasLimit: 60000000
Data: "createNewDelegationContract" +
"@01880b57b708cf408000" +
"@0ea1"
}
关于参数如何编码的更多细节,请点击这里。
上述交易创建了发送者拥有的新委托合约,总委托上限为 7231.941 EGLD,服务费为奖励的 37.45%。此外,新创建的委托合约将以 1250 埃及镑的赌注池开始。
配置委托合约
委托合约的所有者有许多操作可供他们支配。
元数据
委托合约可以存储标识赌注池的信息:它的可读名称、它的网站和它的相关 keybase.io 身份。
SetMetadataTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 2000000
Data: "setMetaData"
"@" + <name of the staking pool, in hexadecimal encoding> +
"@" + <website of the staking pool, in hexadecimal encoding > +
"@" + <keybase.io identity of the staking pool, in hexadecimal encoding>
}
关于参数如何编码的更多细节,点击这里。
将名称设置为"Elrond Staking"
、将网站设置为"elrond.staking"
并将 keybase.io 标识符设置为"elrondstaking"
的Data
字段的示例如下:
"setMetaData" +
"@456c726f6e64205374616b696e67" //Elrond Staking
"@656c726f6e642e7374616b696e67" //elrond.staking
"@656c726f6e647374616b696e67" //elrondstaking
重要
在元数据中设置锁定池的 keybase.io 标识是连接委托合约和 keybase.io 标识的第步。第二步在下一节显示信息中解释,其中进行反向连接:从 keybase.io 标识到委托合约地址。
显示信息
要为您的授权合约定制信息(在 Maiar 和 web wallet 的授权页面上显示的列表中提供),必须在 keybase.io 帐户上添加一些附加信息。请填写头像图片并编辑提供姓名和简历的个人资料。这些信息以及服务费、已完成百分比和 APR 将显示在 web wallet 和 Maiar 的委托页面上。如果找不到此信息,将显示通用徽标和委托合约的地址。
为了完成委托合约和锁定池的 keybase.io 标识之间的匹配,必须在/public/<keybase.io identity>/elrond/
文件夹中添加一个名称设置为委托合约地址的空文件。
"elrondstaking"
keybase.io 标识的空文件路径示例如下:
public/elrondstaking/elrond/erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr0llllsj732py
重要
连接委托合约和 keybase.io 标识的第步通过添加一个空文件来完成,该空文件的名称与委托合约的地址相同,并证明在元数据中设置的被引用的 keybase.io 标识也引用了委托合约的地址。这样,两个方向的连接都是密封的。
提示
为了能够将 testnet 或 devnet 合约连接到 keybase.io 标识,必须在/elrond
文件夹中创建一个新文件夹——testnet 命名为"testnet"
, devnet 命名为"devnet"
。testnet
上相同委托合约的示例如下:
public/elrondstaking/elrond/testnet/erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr0llllsj732py
下面提供了一个如何根据 keybase.io 中提供的信息显示委托合约的示例。
重要
要将验证器本身连接到特定的 keybase.io 堆栈池标识,还需要完成两个额外的步骤:
- 为每个验证器创建一个名称设置为
"<BLS key>"
的空文件,并将该空文件添加到 keybase.io 身份:public/<keybase.io identity>/elrond/<BLS key>
上的/elrond
文件夹中 - 将
config/prefs.toml
文件中每个验证器的Identity
设置为 keybase.io 堆栈池标识。
[Preferences]
# Identity represents the keybase's identity
Identity = "<keybase.io identity>" // e.g. Identity = "elrondstaking"
服务费
服务费是将保留给委托合约所有者的验证者奖励的百分比。授权者可以申请或重新授权剩余的奖励。
服务费可以通过以下形式的交易随时更改:
ChangeServiceFeeTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 2000000
Data: "changeServiceFee" +
"@" + <service fee as hundredths of percents, in hexadecimal encoding>
}
关于参数如何编码的更多细节,请点击这里。
在Data
字段中,传递给changeServiceFee
的唯一参数是服务费的新值,以百分之一表示。
将服务费设置为 0 ( "00"
十六进制)指定不为委托合约的所有者保留任何奖励-所有奖励都将提供给委托者。服务费以后随时可以修改。
提示
比如 37.45%的服务费,用整数 3745 表示。这个整数必须进行十六进制编码(3745 变成"0ea1"
)。
最后,一个包含changeServiceFee@0ea1
的Data
字段会将服务费改为 37.45%。
自动激活
启用自动激活时,一旦资金达到足够的数量,委托合约就会激活(锁定)非活动节点。因此,任何委托交易都可能触发非活动节点的激活,假设该交易有足够的 gas。
可以使用以下形式的交易来启用或禁用自动激活:
SetAutomaticActivationTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 2000000
Data: "setAutomaticActivation" +
"@" + <"true" or "false" in hexadecimal encoding>
}
关于参数如何编码的更多细节,请点击这里。
传递给setAutomaticActivation
的唯一参数是true
或false
,作为十六进制编码的 ASCII 字符串。作为参考,true
为"74727565"
,false
为"66616c7365"
。
提示
例如,包含"setAutomaticActivation@74727565"
的Data
字段启用自动激活。
委托帽
总授权上限是授权合约可以持有的 EGLD 的最大可能大小。达到总授权上限后,合约将拒绝任何后续资金。
可以使用以下形式的交易随时修改总授权上限:
ModifyTotalDelegationCapTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 2000000
Data: "modifyTotalDelegationCap" +
"@" + <total delegation cap in EGLD, fully denominated, in hexadecimal encoding>
}
关于参数如何编码的更多细节,点击这里。
在Data
字段中,传递给modifyTotalDelegationCap
的唯一参数是委托上限的新值。它被表示为 EGLD 的完全计价金额,意思是它是10确保不要对代表总委托上限的 ASCII 字符串进行编码。
提示
例如,要获得 7231.941 EGLD 的完全命名形式,必须将金额乘以命名因子10不对 ASCII 字符串"7231941000000000000000"
进行编码,而是对整数 72319410000000000000 本身进行编码。这将导致“01880b57b708cf408000”。
最后,包含"modifyTotalDelegationCap@01880b57b708cf408000"
的Data
字段会将总委托上限更改为 7231.941 EGLD。
将总委托上限设置为 0(十六进制的"00"
)指定无限制的总委托量。以后总是可以修改的。
重要
总委派上限不能设置为低于当前活动节点的数量。它必须大于该数量或设置为 0(无限上限)。
管理节点
添加节点
当第一次创建委托合约时,它不包含关于节点的信息。然后,合约的所有者必须将节点注册到合约中,以便以后可以激活它们。默认情况下,任何新添加的节点都是“非活动”的。
添加节点需要属于每个节点的 BLS 密钥对,合约的所有者用它来证明他们有权访问节点。这种证明包括用每个节点的秘密 BLS 密钥分别签署委托合约本身的地址。这将导致与节点一样多的签名消息。
向委托合约添加N
节点是通过提交一个交易来完成的,该交易的值设置如下:
AddNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "addNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <address of the delegation contract signed with the secret BLS key of the first node, in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
"@" + <address of the delegation contract signed with the secret BLS key of the second node, in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
"@" + <address of the delegation contract signed with the secret BLS key of the Nth node, in hexadecimal encoding>
}
关于参数如何编码的更多细节,点击这里。
如上所示,Data
字段包含一个N
对的枚举。这种配对包括节点的公共 BLS 密钥以及通过用相应节点的秘密 BLS 密钥签署委托合约的地址而产生的消息。有多少节点就有多少对。
打桩节点
当委托合约持有的桩池包含足够数量的 EGLD 时,非活动(非桩)节点可以被桩(激活)。这将节点提升到验证者的状态,这意味着它们参与共识并获得奖励。
本小节描述节点的手动锁定(激活)。为了在资金可用时自动锁定(激活)节点,可以启用自动激活。
要手动锁定特定节点,可以提交以下形式的交易:
StakeNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "stakeNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,点击这里。
Data
字段包含对应于要被标记的节点的N
公共 BLS 键的枚举。
解散节点
已经堆叠(活动)的验证器节点可以手动取消堆叠。
重要
在拆栈之后的下一个时期开始时,验证器被降级为验证器状态。这意味着他们停止接受奖励。
取消下注并不代表下注的金额回到下注池(参见取消下注和撤回)。
要在卸堆完成前取消停用,可将节点重新启动。
为了开始选择验证器节点的停用过程,使用以下形式的交易:
UnstakeNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "unStakeNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,请点击这里。
Data
字段包含对应于要拆分的节点的N
公共 BLS 键的枚举。
节点
已经取消任务的验证器节点可以在它们的停用完成之前重新启动(重新激活)。要取消它们的停用,使用以下形式的交易:
RestakeNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "reStakeUnStakedNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,请点击这里。
Data
字段包含对应于要被重新分配任务的节点的N
公共 BLS 键的枚举。
解绑节点
已经被解栈的节点可以被完全去激活,这个过程被称为解绑定。
重要
在取消绑定之后的下一个时期开始时,验证器被降级为观察者状态,而不是取消绑定。参见上面的拆垛。
已经解除绑定的验证器节点不能重新启动(重新激活)。它们必须被重新标桩。
UnbondNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "unBondNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,请点击这里。
Data
字段包含对应于要解除绑定的节点的N
公共 BLS 键的枚举。
移除节点
所有者可以随时从委托合约中删除非活动(未标桩、未绑定)节点。不能删除活动(固定)或未固定的节点。
与添加节点不同,该步骤不需要节点的 BLS 键对。
从委托合约中删除N
节点是通过提交一个值设置如下的交易来完成的:
RemoveNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 1000000 + N·6000000
Data: "removeNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,点击这里。
Data
字段包含对应于要移除的节点的N
公共 BLS 键的枚举。
un jaling 节点
当主动验证器节点表现不佳或对网络有害时,它们会受到降低评级的惩罚。评级对于获得奖励至关重要,因为它直接决定了验证者被一致选择的可能性。
然而,验证器的等级可能会下降到可接受的阈值以下。结果,验证器将开始它的下一个纪元被监禁,这阻止了它加入共识。
重要
一个被监禁的验证者既不会失去它的股份也不会失去它的地位。它仍然活跃,但在监狱中不能获得奖励。
从监狱中找回一个验证器并恢复它被称为 unjailing ,为此必须支付 2.5 埃及镑的罚款。通过为每个验证器支付 2.5 EGLD,可以同时从监狱中恢复多个验证器。拆箱交易的格式如下:
UnjailNodesTransaction {
Sender: <account address of the delegation contract owner>
Receiver: <address of the delegation contract>
Value: 2.5 EGLD × <number of nodes to be unjailed>
GasLimit: 1000000 + N·6000000
Data: "unJailNodes" +
"@" + <public BLS key of the first node in hexadecimal encoding> +
"@" + <public BLS key of the second node in hexadecimal encoding> +
<...> +
"@" + <public BLS key of the Nth node in hexadecimal encoding> +
}
关于参数如何编码的更多细节,请点击这里。
注意,Value
字段依赖于N
,即要取消的验证器的数量。
Data
字段包含对应于要解除连接的节点的N
公共 BLS 密钥的枚举。
委托和管理委托资金
将自己的资金委托给赌注池的账户称为委托人。委托合约也为他们提供了一组操作。这意味着委托合约的所有者也可以使用这些操作。
下放资金
账户通过为赌注池提供资金而成为委托人,即他们委托自己的资金。委托者因其贡献而得到奖励,其奖励比例由验证者节点获得。默认情况下,委托合约的所有者是第一个委托人,在创建时已经向赌注池贡献了 1250 EGLD。
重要
委托合约从委托人处收到的额外资金将立即用于补充现有有效验证人的股份,从而增加他们的奖励。
提交委托交易会考虑到自动激活的状态:如果委托资金导致赌注池中的金额足够用于额外节点的赌注,它可以自动触发它们的激活。只有当交易包含足够的天然气时,才会发生这种情况。
但是,如果 gas 不足,或者如果自动激活被禁用,那么通过委托交易接收的金额将简单地充入已经激活的验证者的股份。假设资金充足,随后的手动打桩将需要使用资金进行打桩。
任何基金持有人都可以通过提交以下形式的交易来委托基金:
DelegateTransaction {
Sender: <account address of funds holder>
Receiver: <address of the delegation contract>
Value: minimum 1 EGLD
GasLimit: 12000000
Data: "delegate"
}
关于参数如何编码的更多细节,点击这里。
如果交易成功,则资金持有人已经成为委托人,并且资金或者成为活跃验证者的股份的充值金额,或者可以触发非活跃节点的赌注,如上所述。
领取奖励
验证器节点获得的一部分奖励被保留给每个委托者。为了要求奖励,委托人可以发布以下形式的交易:
ClaimRewardsTransaction {
Sender: <account address of existing delegator>
Receiver: <address of the delegation contract>
Value: 0
Gas: 6000000
Data: "claimRewards"
}
关于参数如何编码的更多细节,请点击这里。
如果交易成功,委托人将获得他们有权获得的奖励比例。
再授权奖励
当前委托奖励也可以立即委托,而不是认领。这使得它的操作非常类似于委派。
重要
就像委托一样,奖励的重新委托考虑了自动激活的状态:如果重新委托的奖励导致赌注池中的金额变得足够用于额外节点的赌注,它可以自动触发它们的激活(在重新委托交易中需要足够的 gas)。
使用以下形式的交易重新授权奖励:
RedelegateRewardsTransaction {
Sender: <account address of existing delegator>
Receiver: <address of the delegation contract>
Value: 0
Gas: 12000000
Data: "reDelegateRewards"
}
关于参数如何编码的更多细节,点击这里。
如果交易成功,委托人目前不会收到任何 EGLD,但他们有权获得的奖励将添加到他们的委托金额中。
撤销资金
授权人可以表达从风险池中提取一定数量的 EGLD 的意图。然而,这个过程不能立即发生,并且在金额实际上可用于提取之前可能需要几个时期,因为资金可能已经用于活动验证器的赌注,并且这意味着节点的拆分可能是必要的。
重要
如果委托人请求取消委托的数量将导致堆栈池下降到保持所有当前验证器活动所需的足够数量以下,则一些验证器将不可避免地终止不堆栈。委托合约的所有者可以干预并增加额外的资金来防止这种情况。
先前用作验证人赌注的资金已在下注时转移到单独的系统智能合约中,因此委托合约本身不持有这些资金。但是提交取消委托请求将导致委托合约试图检索它们。
如果资金目前未被用作股权,委托合约可以立即收到资金;这使得它们可用于随后的撤回。在这种情况下,以前委托的资金充当现有验证人股份的补充。
另一方面,如果所请求的资金当前正被用作赌注,则委托合约还不能接收它们。
重要
用作赌注的资金只有在元链上建造了 144000 个方块后才能收回(略多于 10 个年代)。验证者是否已经被降级为观察者,或者是否已经被完全解除任务,这都无关紧要——在上述时间过去之前,资金可能不会返回。
在 144000 块之后,资金可以由其合法所有者正常提取。
为了表达将来从赌注池中提取资金的意图,委托人可以提交以下交易:
UndelegateTransaction {
Sender: <account address of existing delegator>
Receiver: <address of the delegation contract>
Value: 0
Gas: 12000000
Data: "unDelegate"
"@" + <amount to undelegate in EGLD, minimum 1 EGLD, fully denominated, in hexadecimal encoding>
}
关于参数如何编码的更多细节,点击这里。
在Data
字段中,传递给unDelegate
的唯一参数是希望取消授权并在以后撤销的 EGLD 数量。它被表示为 EGLD 的完全计价金额,意思是它是10然后,必须对完全命名的金额进行十六进制编码。确保不要对代表金额的 ASCII 字符串进行编码。
撤回
提交取消委托交易后,委托人最终可以从赌注池中提取资金。
重要
资金必须始终首先取消委托。它们不能被直接撤回。
该操作将提取属于特定委托人的所有当前未委托的资金。
使用以下形式的交易提取资金:
WithdrawTransaction {
Sender: <account address of existing delegator>
Receiver: <address of the delegation contract>
Value: 0
GasLimit: 12000000
Data: "withdraw"
}
关于参数如何编码的更多细节,点击这里。
如果交易成功,授权者将收到他们之前请求取消授权的所有 EGLD。该金额将从赌注池中移除。
委托合约查看功能
可以使用以下查看功能来查询委托合约。这些查询应该在/vm-values/query
端点上的本地代理上完成。
为简单起见,以下文档部分仅显示相关returnData
字段的值,并省略其他字段。
{
"data": {
"data": {
"returnData": [
],
"returnCode": "ok",
"returnMessage": "",
"gasRemaining": 0,
"gasRefund": 0,
"outputAccounts": null,
"deletedAccounts": null,
"touchedAccounts": null,
"logs": []
}
},
"error": "",
"code": "successful"
}
岗位合约配置
该响应包含一个按固定顺序排列的属性数组(base64 编码):所有者地址、服务费、最大委托上限、初始所有者资金、自动激活、委托上限、可更改服务费、重新委托时的检查上限、创建时的随机数和解除绑定期。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getContractConfig"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<owner address bytes in base64 encoding of the hexadecimal encoding>",
"<service fee as hundredths of percents base64 of the hexadecimal encoding>",
"<maximum delegation cap in base64 of the hexadecimal encoding>",
"<initial owner funds in base64 of the hexadecimal encoding>",
"<has automatic activation - true/false in base64 encoding",
"<has delegation cap - true/false in base64 encoding",
"<changeable service fee - true/false in base64 encoding",
"<check cap on redelegate - true/false in base64 encoding",
"<blockchain nonce at creation in base64 of the hexadecimal encoding>",
"<unbond period in rounds in base64 of the hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getContractConfig"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"gKzHUD288mzScNX6nEmkGm4CHneMdrrPhJyPET9iGA8=",
null,
"",
"Q8M8GTdWSAAA",
"dHJ1ZQ==",
"ZmFsc2U=",
"dHJ1ZQ==",
"AuU=",
"+g=="
]
}
岗位合约元数据
响应包含一个固定顺序的属性数组(base64 编码):标记供应商名称、网站和标识符。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getMetaData"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<staking provider name in base64 encoding>",
"<staking provider website in base64 encoding>",
"<staking provider identifier in base64 encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getMetaData"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"U3Rha2luZyBwcm92aWRlciB0ZXN0",
"d3d3LmVscm9uZHN0YWtpbmcuY29t",
"dGVzdEtleWJhc2VJZGVudGlmaWVy"
]
}
职务授权人数
响应包含一个值,该值表示十六进制编码的 base64 编码中的委托者数量。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getNumUsers"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<number of distinct delegators in base64 encoding of the hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getNumUsers"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"BQ=="
]
}
岗位节点数
响应包含十六进制编码的 base64 编码中的节点数。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getNumNodes"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<number of nodes in base64 encoding of the hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getNumNodes"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"Dg=="
]
}
岗位节点状态
该响应包含交替状态代码和 BLS 键的枚举。每个状态代码后面是它描述的节点的 BLS 键。状态代码和 BLS 键都是以 base64 编码的。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getAllNodeStates"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<state in base64 encoding>",
"<public BLS key of the node in hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getAllNodeStates"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"c3Rha2Vk",
"KJ6auG3rKQydktc9soWvyBOa5UPA7DYezttTqlS6JIIvsvOaH8ghs2Qruc4aXLUXNJ1if7Ot9gbt5dNUrmNfkLtZl1hpLvPllrGmFP4bKCzZ25UNiTratwOMcXhhCmSD",
"bm90U3Rha2Vk",
"7gJzQ3GQ4htSx6CYvOkXPDdwGfzdahuDY4agZkGhIAMfB44K08FP6z3wLQEnn2IULfZ8/Hds38LEu3Xq+mJZ4FktF0vm8C1T34b5uAEpZWtDZLICAEFCuQZrqS5Qb1CR",
"vTyNQ/vDxg0L8LmoGuKP+4/wsbyWv8RaqeQ+WH+xrMvk1m7Q3wjheOpjYtQPz80YZ1CrwKj6ObsCUejP4uuvi3MQ1oMEGKg5yh3kRgybRb4TXAWEpAPszYMLIQhrIn2P",
"9TbGQCcrbyXH9HBAhzIWOuH/cdSNO1dwxO5foM2L28tWU0p9Kos6DKsPMtKMx4sAeRal08K3Dk0gQxeTSAvC2fb3DAQt01rmPSAqCSXZetSX12BVcTi+pYGUHaXKJ/OW"
]
}
岗位总活跃股份
响应包含一个值,表示十六进制编码的 base64 编码中的总活动股份。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getTotalActiveStake"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<total active stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getTotalActiveStake"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"ArXjrxaxiAAA"
]
}
职务总未职务
响应包含一个值,该值表示十六进制编码的 base64 编码中的未分配股份总数。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getTotalUnStaked"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<total unstaked stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getTotalUnStaked"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"ArXjrxaxiAAA"
]
}
岗位累计奖励总额
该响应包含一个值,该值表示以十六进制编码的 base64 编码的所有累积奖励的总和。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getTotalCumulatedRewards",
"caller": "erd1qqqqqqqqqqqqqqqpqqqqqqqqlllllllllllllllllllllllllllsr9gav8"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<total accumulated rewards in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getTotalCumulatedRewards",
"caller": "erd1qqqqqqqqqqqqqqqpqqqqqqqqlllllllllllllllllllllllllllsr9gav8"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"czSCSSYZr8E="
]
}
职务委托人可申领奖励
该响应包含一个值,该值以十六进制编码的 base64 编码表示委托人可申请的总奖励。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getClaimableRewards",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<delegator claimable rewards in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getClaimableRewards",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"Ft9RZzF7Dyc"
]
}
职务委托人累计奖励总额
该响应包含一个值,该值以十六进制编码的 base64 编码表示委托人的总累积奖励。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getTotalCumulatedRewardsForUser",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<delegator total cumulated rewards in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getTotalCumulatedRewardsForUser",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"Ft9RZzF7Dyc"
]
}
职务委托人主动入股
响应包含一个值,该值以十六进制编码的 base64 编码表示委托者的活动股份。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getUserActiveStake",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<active stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getUserActiveStake",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"slsrv1so8QAA"
]
}
发文委派者未表态
响应包含一个值,该值以十六进制编码的 base64 编码表示委托者的未分配股份。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getUserUnStakedValue",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<delegator unstaked stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getUserUnStakedValue",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"ARWORgkT0AAA"
]
}
职务委托人不可兑现的股份
响应包含一个值,表示十六进制编码的 base64 编码中不可绑定的部分。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getUserUnBondable",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<delegator unbondable stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getUserUnBondable",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"ARWORgkT0AAA"
]
}
职务委派人未委派的职务
响应包含一个枚举,表示十六进制编码的 base64 编码中不同的未删除的 stake 值。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getUserUnDelegatedList",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<undelegated stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getUserUnDelegatedList",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"Q8M8GTdWSAAA",
"iscjBInoAAA="
]
}
发文委托人资金数据
该响应包含用于委托人的十六进制编码的 base64 的枚举:活动赌注、无人认领的奖励、未下注的赌注和不可下注的赌注。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getDelegatorFundsData",
"args" : ["<delegator address in hexadecimal encoding of the bech32 decoded value>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<active stake in base64 encoding of the hex encoding>",
"<unclaimed rewards in base64 encoding of the hex encoding>",
"<unstaked stake in base64 encoding of the hex encoding>",
"<unbondable stake in base64 encoding of the hex encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhllllsajxzat",
"funcName": "getUserUnDelegatedList",
"args":["ebfd923cd251f857ed7639e87143ac83f12f423827abc4a0cdde0119c3e37915"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"REAihYg4zAAA",
"Q8M8GTdWSAAA",
"REAihYg4zAAA",
"Q8M8GTdWSAAA"
]
}
发布获取历元奖励数据
该响应包含指定纪元的枚举,该纪元表示用于要分配的奖励、总活动赌注和服务费的十六进制编码的 base64 编码。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "<address of the delegation contract in bech32 encoding>",
"funcName": "getRewardData",
"args" :["<epoch number in hexadecimal encoding>"]
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<rewards to distribute in base64 encoding of the hexadecimal encoding>",
"<total active stake in base64 encoding of the hexadecimal encoding>",
"<service fee in base64 encoding of the hexadecimal encoding>"
]
}
``` ```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqp0llllswfeycs",
"funcName": "getRewardData",
"args" : ["fc2b"]
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"REAihYg4zAAA",
"Q8M8GTdWSAAA",
"REAihYg4zAAA"
]
}
委托管理员查看功能
邮政所有合约地址
响应包含 base64 编码的 bech32 密钥字节的枚举。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6",
"funcName": "getAllContractAddresses"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<address bytes of the system delegation smart contract in base64 encoding of the hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6",
"funcName": "getAllContractAddresses"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAL///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAP///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAT///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAX///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAb///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAf///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAj///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAn///8=",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAr///8="
]
}
岗位合约配置
该响应包含按固定顺序(base64 编码)的属性枚举:当前合约数量、最后创建的合约地址、最小和最大服务费、最小存款和委托。
RequestResponseExample ```rust https://proxy:port/vm-values/query
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6",
"funcName": "getContractConfig"
}
``` 下面只显示`returnData`;完整响应见[查看功能](/validators/delegation-manager#delegation-contract-view-functions)
```rust
{
"returnData": [
"<current number of contracts in base64 encoding>",
"<last used address bytes in base64 encoding of the hexadecimal encoding>",
"<minimum service fee as hundredths of percents in hexadecimal encoding>",
"<maximum service fee as hundredths of percents in hexadecimal encoding>",
"<minimum deposit amount in hexadecimal encoding>",
"<minimum delegation amount in hexadecimal encoding>"
]
}
``` 请求
```rust
{
"scAddress": "erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqylllslmq6y6",
"funcName": "getContractConfig"
}
响应(只有下面显示的returnData
;参见查看功能查看完整响应)
{
"returnData": [
"Gw==",
"AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAABz///8=",
"",
"JxA=",
"Q8M8GTdWSAAA",
"iscjBInoAAA="
]
}