AI Bounty Claim
Use this skill for AI bounty claiming on tDVV through RewardClaimContract.
For AA/CA, the standard wallet path in this skill is manager signer -> CA.ManagerForwardCall -> reward.ClaimByPortkeyToCa(Hash ca_hash).
This skill is intentionally split into one routing file plus focused branch references so weaker agents can follow one path at a time.
Skill Version
- Current skill version:
2.10.0
- If behavior seems inconsistent or an external AI reports unexpected output, ask them to report the
version field from this SKILL.md first.
Scope
Supported claim paths:
EOA: Claim()
AA/CA: ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash)
This skill does not implement:
- wallet custody or wallet creation on behalf of the user
- private key generation, storage, or import on behalf of the user
- Portkey recovery flows
- blind retry loops after claim failures
Required Dependency Skills
Use these dependency skills explicitly instead of assuming the host will infer them:
- Portkey EOA skill:
https://github.com/Portkey-Wallet/eoa-agent-skills
- Portkey CA skill:
https://github.com/Portkey-Wallet/ca-agent-skills
Routing rule:
- use the Portkey EOA skill for local EOA account setup, signer resolution, and EOA-side
Claim()
- use the Portkey CA skill for local AA/CA account setup,
caHash resolution, and recovery/login only when needed to recover local context, resolve the target AA/CA on tDVV, or recover a usable manager signer
Current Environment Defaults
Use these defaults only when the user is clearly operating in the current AI bounty environment:
- Chain:
tDVV
- Environment meaning: current AI bounty mainnet sidechain environment
- Reward contract:
ELF_2fc5uPpboX9K9e9NTiDHxhCcgP8T9nV28BLyK8rDu8JmDpn472_tDVV
- Reward contract raw address:
2fc5uPpboX9K9e9NTiDHxhCcgP8T9nV28BLyK8rDu8JmDpn472
- Public RPC:
https://tdvv-public-node.aelf.io
- RPC validation endpoint:
https://tdvv-public-node.aelf.io/api/blockChain/chainStatus
- Portkey CA contract:
ELF_2UthYi7AHRdfrqc1YCfeQnjdChDLaas65bW4WxESMGMojFiXj9_tDVV
- Portkey CA contract raw address:
2UthYi7AHRdfrqc1YCfeQnjdChDLaas65bW4WxESMGMojFiXj9
- Current campaign default reward: Portkey AA/CA
2 AIBOUNTY, EOA 1 AIBOUNTY
Treat reward amounts and addresses as campaign defaults, not permanent protocol constants.
Canonical AA/CA Claim Path
- Always use
manager signer -> Portkey CA contract ManagerForwardCall -> reward contract ClaimByPortkeyToCa(Hash ca_hash) as the standard AA/CA wallet operation.
ClaimByPortkeyToCa(Hash ca_hash) is permissionless at the reward method layer, but this skill still models AA/CA claiming through the standard CA wallet forwarding path.
- The forwarded reward still goes to the resolved
holderInfo.CaAddress, not to the manager signer.
- The forwarded reward method input is
.aelf.Hash; pass caHash bytes as Hash.value.
- For SDK or helper calls, use raw CA and reward addresses rather than the wrapped
ELF_..._tDVV strings.
- Prefer the high-level helper
managerForwardCallWithKey(...) in the dependency implementation. Keep lower-level protobuf and descriptor details in the AA/CA branch reference.
Gas Rules
Use these gas rules as current environment defaults:
AA/CA: when the selected signer appears to have little or no ELF, explain that the current environment may still provide a daily gas subsidy worth 1 ELF
AA/CA: if the standard wallet path is ready, do not stop before the first send only because visible ELF is low or zero; show the gas note, require explicit confirmation, and allow one attempt
AA/CA or EOA: when the corresponding on-chain account has 10 ELF, it can receive a daily gas subsidy worth 1 ELF
EOA: if there is not enough ELF to pay gas, stop and tell the user to get ELF transferred in before sending Claim()
EOA: if the user cannot get enough ELF, recommend switching to AA/CA and repeat that the current environment gas experience is smoother for AA/CA
Treat these gas rules as current environment defaults, not permanent protocol constants.
RPC validation note:
- the RPC root URL may return
404
- do not treat root-path
404 as proof that the node is down
- validate node availability through
/api/blockChain/chainStatus
Contract Introspection Guardrail
- Do not use
/api/contract/contractViewMethodList to conclude that the reward contract lacks write methods.
- Treat
/api/contract/contractViewMethodList as view-only discovery. If it only shows GetConfig, HasAddressClaimed, HasCaClaimed, or other read methods, that only proves those view methods are visible.
- If full method verification is needed, use
/api/blockChain/contractFileDescriptorSet only as an optional verification path, not as the default claim flow.
- When using node introspection APIs, normalize the reward contract address into the format accepted by the endpoint. Do not send the wrapped
ELF_..._tDVV address string directly.
- If introspection is ambiguous, incomplete, or returns
Not found because of query format issues, keep using the canonical reward contract address and supported methods already defined in this skill.
Required First Step
For generic claim requests without an explicit account type, do not jump directly to an on-chain method.
Examples:
help me claim
claim for me
帮我 Claim
帮我领取
The agent must first explain:
AA/CA: account-style experience, typically based on email / guardian / recovery flows, current campaign reward is 2 AIBOUNTY
AA: this is the preferred user-facing term in this skill
CA: this is still accepted as an alias because some users still say CA
EOA: traditional wallet experience, typically based on mnemonic / private key, current campaign reward is 1 AIBOUNTY
AA/CA: current environment gas experience is smoother because daily subsidy rules may apply automatically, and the first confirmed AA/CA attempt can usually be tried before fee is treated as the blocker
EOA: if there is no ELF, the claim transaction can fail with Transaction fee not enough
EOA: if the user cannot get enough ELF, recommend switching to AA/CA
- recommendation: choose
AA/CA
Then ask the user which account type they want to use: AA/CA or EOA.
Routing Rules
Choose one branch before asking for extra claim inputs.
Branch 1: Account Choice And Onboarding
Read references/flows/account-choice.md when:
- the user makes a generic claim request without explicitly choosing
AA/CA or EOA
- examples:
help me claim, claim for me, 帮我 Claim, 帮我领取
- the user has not yet chosen between
AA/CA and EOA
- the user has chosen
AA, CA, AA/CA, or EOA, but the local account context is not ready yet
Branch 2: Diagnostics And Stop
Read references/flows/diagnostics-stop.md first when any of the following is true:
- the user tries to fill an exchange address, custodial address, or any address without a user-controlled private key
- the user wants the agent to create or hold a wallet for them
- the user says Portkey AA/CA already exists on mainnet but cannot be resolved on
tDVV
- the user says the guardian already exists and recovery is required
- a prior contract call failed and the prerequisite is still unresolved
Branch 3: Portkey AA/CA Claim
Read references/flows/portkey-ca.md when:
- the user explicitly chose
AA, CA, or AA/CA
- a local Portkey AA/CA account is already available, or the target
caHash is already known
- use the Portkey CA skill dependency for AA/CA handling
Branch 4: EOA Claim
Read references/flows/eoa-skill.md when:
- the user explicitly chose
EOA
- a local EOA account is already available
- no AA/CA identity flow is involved
- use the Portkey EOA skill dependency for EOA handling
Global Hard Rules
- Never continue with
Claim() if the address is exchange-managed, custodial, or lacks a user-controlled private key.
- Always tell the user not to fill exchange or custodial addresses.
- Never offer to create, custody, or store a wallet for the user.
- Do not ask the user to paste an address when a local EOA or local AA/CA context should be used.
- For generic claim requests, explain
AA/CA vs EOA first and ask the user to choose one before entering a claim branch.
- Treat
AA as the preferred user-facing term, but accept CA as the same route alias.
- Always recommend
AA/CA because the current campaign reward is 2 AIBOUNTY for AA/CA and 1 AIBOUNTY for EOA.
- Also recommend
AA/CA because the current environment gas experience is smoother than EOA.
- If
EOA does not have enough ELF, tell the user to add ELF first and also recommend switching to AA/CA if getting ELF is not feasible.
- For
AA/CA, if the standard wallet path is ready, do not stop before the first confirmed attempt only because visible ELF is low or zero; show the gas note and allow one confirmed attempt.
- Explicitly use the Portkey EOA skill for EOA work and the Portkey CA skill for AA/CA work; do not rely on implicit skill discovery.
- When checking whether the
tDVV RPC is reachable, query https://tdvv-public-node.aelf.io/api/blockChain/chainStatus instead of the site root.
- If the RPC root URL returns
404 but /api/blockChain/chainStatus returns chain status JSON, treat the node as reachable.
- Never use
/api/contract/contractViewMethodList to decide that Claim() or ClaimByPortkeyToCa(Hash ca_hash) does not exist.
- If full method verification is needed, use
/api/blockChain/contractFileDescriptorSet only as an optional verification path.
- When using node introspection APIs, normalize the contract address first instead of querying with the wrapped
ELF_..._tDVV string directly.
- If introspection remains ambiguous, keep the reward contract address and supported write methods defined in this skill as canonical defaults.
- For AA/CA SDK or helper calls that require raw addresses, use raw CA and reward addresses rather than the wrapped
ELF_..._tDVV strings.
- If the chosen local account context is not ready, guide the user to create the local
AA/CA or local EOA first, then continue with the matching claim branch.
NOTEXISTED only means the transaction is not confirmed yet; it is not a final success or failure state.
- If the final chain error is
Transaction fee not enough, treat it as an insufficient transaction fee problem, not as a claim logic failure.
- Never ask for
ca_hash in a plain EOA Claim() flow.
- For AA/CA, accept either
email or caHash as the starting input. If only email is available, use the Portkey CA skill to resolve the target caHash, and recover a usable manager signer when needed for the standard wallet path.
- Prefer the locally created EOA address for
Claim() and the locally resolved AA/CA context for ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash).
- Do not route the recommended AA/CA claim through deprecated
ClaimByPortkey(Hash).
- Before any on-chain write, show the resolved manager signer, CA contract, forwarded reward contract, method chain, key inputs, expected receiver semantics, and current campaign reward amount, then require explicit user confirmation.
- If explicit confirmation is missing, stop before sending.
- If any prerequisite is unresolved, stop and explain the blocker instead of guessing.
- If a submitted transaction returns
txId, include txId and https://aelfscan.io/tDVV/tx/<txid> in the response, even if the final result is still pending lookup.
- If a transaction fails, return the exact chain error and stop. Do not invent recovery success.
Receiver Semantics
Claim() sends the reward to Context.Sender.
ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash) sends the reward to the resolved AA/CA address, not to the manager signer.
Required Reading Pattern
After choosing the branch:
- Read the matching flow document under
references/flows/.
- Read the matching example document under
references/examples/.
- Follow that branch only.
- Do not mix EOA and AA/CA instructions in one answer.
Branch Map
1---2name: ai-bounty-claim3description: Use when claiming the AI bounty on the tDVV mainnet sidechain. First explain the difference between Portkey AA/CA and EOA, recommend AA/CA because the current campaign rewards 2 AIBOUNTY for AA/CA and 1 AIBOUNTY for EOA, then route to account onboarding, Portkey AA/CA claim through CA ManagerForwardCall, EOA claim, or diagnostics-only stop handling.4---56# AI Bounty Claim78Use this skill for AI bounty claiming on `tDVV` through `RewardClaimContract`.910For AA/CA, the standard wallet path in this skill is `manager signer -> CA.ManagerForwardCall -> reward.ClaimByPortkeyToCa(Hash ca_hash)`.1112This skill is intentionally split into one routing file plus focused branch references so weaker agents can follow one path at a time.1314## Skill Version1516- Current skill version: `2.10.0`17- If behavior seems inconsistent or an external AI reports unexpected output, ask them to report the `version` field from this `SKILL.md` first.1819## Scope2021Supported claim paths:2223- `EOA`: `Claim()`24- `AA/CA`: `ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash)`2526This skill does not implement:2728- wallet custody or wallet creation on behalf of the user29- private key generation, storage, or import on behalf of the user30- Portkey recovery flows31- blind retry loops after claim failures3233## Required Dependency Skills3435Use these dependency skills explicitly instead of assuming the host will infer them:3637- Portkey EOA skill: `https://github.com/Portkey-Wallet/eoa-agent-skills`38- Portkey CA skill: `https://github.com/Portkey-Wallet/ca-agent-skills`3940Routing rule:4142- use the Portkey EOA skill for local EOA account setup, signer resolution, and EOA-side `Claim()`43- use the Portkey CA skill for local AA/CA account setup, `caHash` resolution, and recovery/login only when needed to recover local context, resolve the target AA/CA on `tDVV`, or recover a usable manager signer4445## Current Environment Defaults4647Use these defaults only when the user is clearly operating in the current AI bounty environment:4849- Chain: `tDVV`50- Environment meaning: current AI bounty mainnet sidechain environment51- Reward contract: `ELF_2fc5uPpboX9K9e9NTiDHxhCcgP8T9nV28BLyK8rDu8JmDpn472_tDVV`52- Reward contract raw address: `2fc5uPpboX9K9e9NTiDHxhCcgP8T9nV28BLyK8rDu8JmDpn472`53- Public RPC: `https://tdvv-public-node.aelf.io`54- RPC validation endpoint: `https://tdvv-public-node.aelf.io/api/blockChain/chainStatus`55- Portkey CA contract: `ELF_2UthYi7AHRdfrqc1YCfeQnjdChDLaas65bW4WxESMGMojFiXj9_tDVV`56- Portkey CA contract raw address: `2UthYi7AHRdfrqc1YCfeQnjdChDLaas65bW4WxESMGMojFiXj9`57- Current campaign default reward: Portkey AA/CA `2 AIBOUNTY`, EOA `1 AIBOUNTY`5859Treat reward amounts and addresses as campaign defaults, not permanent protocol constants.6061## Canonical AA/CA Claim Path6263- Always use `manager signer -> Portkey CA contract ManagerForwardCall -> reward contract ClaimByPortkeyToCa(Hash ca_hash)` as the standard AA/CA wallet operation.64- `ClaimByPortkeyToCa(Hash ca_hash)` is permissionless at the reward method layer, but this skill still models AA/CA claiming through the standard CA wallet forwarding path.65- The forwarded reward still goes to the resolved `holderInfo.CaAddress`, not to the manager signer.66- The forwarded reward method input is `.aelf.Hash`; pass `caHash` bytes as `Hash.value`.67- For SDK or helper calls, use raw CA and reward addresses rather than the wrapped `ELF_..._tDVV` strings.68- Prefer the high-level helper `managerForwardCallWithKey(...)` in the dependency implementation. Keep lower-level protobuf and descriptor details in the AA/CA branch reference.6970## Gas Rules7172Use these gas rules as current environment defaults:7374- `AA/CA`: when the selected signer appears to have little or no `ELF`, explain that the current environment may still provide a daily gas subsidy worth `1 ELF`75- `AA/CA`: if the standard wallet path is ready, do not stop before the first send only because visible `ELF` is low or zero; show the gas note, require explicit confirmation, and allow one attempt76- `AA/CA` or `EOA`: when the corresponding on-chain account has `10 ELF`, it can receive a daily gas subsidy worth `1 ELF`77- `EOA`: if there is not enough `ELF` to pay gas, stop and tell the user to get `ELF` transferred in before sending `Claim()`78- `EOA`: if the user cannot get enough `ELF`, recommend switching to `AA/CA` and repeat that the current environment gas experience is smoother for `AA/CA`7980Treat these gas rules as current environment defaults, not permanent protocol constants.8182RPC validation note:8384- the RPC root URL may return `404`85- do not treat root-path `404` as proof that the node is down86- validate node availability through `/api/blockChain/chainStatus`8788## Contract Introspection Guardrail8990- Do not use `/api/contract/contractViewMethodList` to conclude that the reward contract lacks write methods.91- Treat `/api/contract/contractViewMethodList` as view-only discovery. If it only shows `GetConfig`, `HasAddressClaimed`, `HasCaClaimed`, or other read methods, that only proves those view methods are visible.92- If full method verification is needed, use `/api/blockChain/contractFileDescriptorSet` only as an optional verification path, not as the default claim flow.93- When using node introspection APIs, normalize the reward contract address into the format accepted by the endpoint. Do not send the wrapped `ELF_..._tDVV` address string directly.94- If introspection is ambiguous, incomplete, or returns `Not found` because of query format issues, keep using the canonical reward contract address and supported methods already defined in this skill.9596## Required First Step9798For generic claim requests without an explicit account type, do not jump directly to an on-chain method.99100Examples:101102- `help me claim`103- `claim for me`104- `帮我 Claim`105- `帮我领取`106107The agent must first explain:108109- `AA/CA`: account-style experience, typically based on email / guardian / recovery flows, current campaign reward is `2 AIBOUNTY`110- `AA`: this is the preferred user-facing term in this skill111- `CA`: this is still accepted as an alias because some users still say `CA`112- `EOA`: traditional wallet experience, typically based on mnemonic / private key, current campaign reward is `1 AIBOUNTY`113- `AA/CA`: current environment gas experience is smoother because daily subsidy rules may apply automatically, and the first confirmed AA/CA attempt can usually be tried before fee is treated as the blocker114- `EOA`: if there is no `ELF`, the claim transaction can fail with `Transaction fee not enough`115- `EOA`: if the user cannot get enough `ELF`, recommend switching to `AA/CA`116- recommendation: choose `AA/CA`117118Then ask the user which account type they want to use: `AA/CA` or `EOA`.119120## Routing Rules121122Choose one branch before asking for extra claim inputs.123124### Branch 1: Account Choice And Onboarding125126Read [references/flows/account-choice.md](./references/flows/account-choice.md) when:127128- the user makes a generic claim request without explicitly choosing `AA/CA` or `EOA`129- examples: `help me claim`, `claim for me`, `帮我 Claim`, `帮我领取`130- the user has not yet chosen between `AA/CA` and `EOA`131- the user has chosen `AA`, `CA`, `AA/CA`, or `EOA`, but the local account context is not ready yet132133### Branch 2: Diagnostics And Stop134135Read [references/flows/diagnostics-stop.md](./references/flows/diagnostics-stop.md) first when any of the following is true:136137- the user tries to fill an exchange address, custodial address, or any address without a user-controlled private key138- the user wants the agent to create or hold a wallet for them139- the user says Portkey AA/CA already exists on mainnet but cannot be resolved on `tDVV`140- the user says the guardian already exists and recovery is required141- a prior contract call failed and the prerequisite is still unresolved142143### Branch 3: Portkey AA/CA Claim144145Read [references/flows/portkey-ca.md](./references/flows/portkey-ca.md) when:146147- the user explicitly chose `AA`, `CA`, or `AA/CA`148- a local Portkey AA/CA account is already available, or the target `caHash` is already known149- use the Portkey CA skill dependency for AA/CA handling150151### Branch 4: EOA Claim152153Read [references/flows/eoa-skill.md](./references/flows/eoa-skill.md) when:154155- the user explicitly chose `EOA`156- a local EOA account is already available157- no AA/CA identity flow is involved158- use the Portkey EOA skill dependency for EOA handling159160## Global Hard Rules161162- Never continue with `Claim()` if the address is exchange-managed, custodial, or lacks a user-controlled private key.163- Always tell the user not to fill exchange or custodial addresses.164- Never offer to create, custody, or store a wallet for the user.165- Do not ask the user to paste an address when a local EOA or local AA/CA context should be used.166- For generic claim requests, explain `AA/CA vs EOA` first and ask the user to choose one before entering a claim branch.167- Treat `AA` as the preferred user-facing term, but accept `CA` as the same route alias.168- Always recommend `AA/CA` because the current campaign reward is `2 AIBOUNTY` for `AA/CA` and `1 AIBOUNTY` for `EOA`.169- Also recommend `AA/CA` because the current environment gas experience is smoother than `EOA`.170- If `EOA` does not have enough `ELF`, tell the user to add `ELF` first and also recommend switching to `AA/CA` if getting `ELF` is not feasible.171- For `AA/CA`, if the standard wallet path is ready, do not stop before the first confirmed attempt only because visible `ELF` is low or zero; show the gas note and allow one confirmed attempt.172- Explicitly use the Portkey EOA skill for EOA work and the Portkey CA skill for AA/CA work; do not rely on implicit skill discovery.173- When checking whether the `tDVV` RPC is reachable, query `https://tdvv-public-node.aelf.io/api/blockChain/chainStatus` instead of the site root.174- If the RPC root URL returns `404` but `/api/blockChain/chainStatus` returns chain status JSON, treat the node as reachable.175- Never use `/api/contract/contractViewMethodList` to decide that `Claim()` or `ClaimByPortkeyToCa(Hash ca_hash)` does not exist.176- If full method verification is needed, use `/api/blockChain/contractFileDescriptorSet` only as an optional verification path.177- When using node introspection APIs, normalize the contract address first instead of querying with the wrapped `ELF_..._tDVV` string directly.178- If introspection remains ambiguous, keep the reward contract address and supported write methods defined in this skill as canonical defaults.179- For AA/CA SDK or helper calls that require raw addresses, use raw CA and reward addresses rather than the wrapped `ELF_..._tDVV` strings.180- If the chosen local account context is not ready, guide the user to create the local `AA/CA` or local `EOA` first, then continue with the matching claim branch.181- `NOTEXISTED` only means the transaction is not confirmed yet; it is not a final success or failure state.182- If the final chain error is `Transaction fee not enough`, treat it as an insufficient transaction fee problem, not as a claim logic failure.183- Never ask for `ca_hash` in a plain EOA `Claim()` flow.184- For AA/CA, accept either `email` or `caHash` as the starting input. If only `email` is available, use the Portkey CA skill to resolve the target `caHash`, and recover a usable manager signer when needed for the standard wallet path.185- Prefer the locally created EOA address for `Claim()` and the locally resolved AA/CA context for `ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash)`.186- Do not route the recommended AA/CA claim through deprecated `ClaimByPortkey(Hash)`.187- Before any on-chain write, show the resolved manager signer, CA contract, forwarded reward contract, method chain, key inputs, expected receiver semantics, and current campaign reward amount, then require explicit user confirmation.188- If explicit confirmation is missing, stop before sending.189- If any prerequisite is unresolved, stop and explain the blocker instead of guessing.190- If a submitted transaction returns `txId`, include `txId` and `https://aelfscan.io/tDVV/tx/<txid>` in the response, even if the final result is still pending lookup.191- If a transaction fails, return the exact chain error and stop. Do not invent recovery success.192193## Receiver Semantics194195- `Claim()` sends the reward to `Context.Sender`.196- `ManagerForwardCall(...) -> ClaimByPortkeyToCa(Hash ca_hash)` sends the reward to the resolved AA/CA address, not to the manager signer.197198## Required Reading Pattern199200After choosing the branch:2012021. Read the matching flow document under `references/flows/`.2032. Read the matching example document under `references/examples/`.2043. Follow that branch only.2054. Do not mix EOA and AA/CA instructions in one answer.206207## Branch Map208209- Account choice and onboarding:210 [references/flows/account-choice.md](./references/flows/account-choice.md)211 Example: [references/examples/account-choice.md](./references/examples/account-choice.md)212- Portkey AA/CA:213 [references/flows/portkey-ca.md](./references/flows/portkey-ca.md)214 Example: [references/examples/portkey-ca.md](./references/examples/portkey-ca.md)215- EOA:216 [references/flows/eoa-skill.md](./references/flows/eoa-skill.md)217 Example: [references/examples/eoa-skill.md](./references/examples/eoa-skill.md)218- Diagnostics and stop:219 [references/flows/diagnostics-stop.md](./references/flows/diagnostics-stop.md)220 Example: [references/examples/diagnostics-stop.md](./references/examples/diagnostics-stop.md)