mirror of https://github.com/lukechilds/docs.git
Browse Source
fixing #812 in reference to: https://github.com/blockstack/stacks-blockchain/pull/1957/feat/stacks-js-updates
Alexander Graebe
4 years ago
6 changed files with 375 additions and 3 deletions
@ -0,0 +1,205 @@ |
|||
{ |
|||
"pox": { |
|||
"public_functions": [ |
|||
{ |
|||
"name": "allow-contract-caller", |
|||
"input_type": "principal, (optional uint)", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(allow-contract-caller caller until-burn-ht)", |
|||
"description": "Give a contract-caller authorization to call stacking methods. Normally, stacking methods may\nonly be invoked by _direct_ transactions (i.e., the `tx-sender` issues a direct `contract-call` to the stacking methods).\nBy issuing an allowance, the tx-sender may call through the allowed contract." |
|||
}, |
|||
{ |
|||
"name": "delegate-stack-stx", |
|||
"input_type": "principal, uint, (tuple (hashbytes (buff 20)) (version (buff 1))), uint", |
|||
"output_type": "(response (tuple (lock-amount uint) (stacker principal) (unlock-burn-height uint)) int)", |
|||
"signature": "(delegate-stack-stx stacker amount-ustx pox-addr lock-period)", |
|||
"description": "As a delegate, stack the given principal's STX using `partial-stacked-by-cycle`.\nOnce the delegate has stacked > minimum, the delegate should call `stack-aggregation-commit`." |
|||
}, |
|||
{ |
|||
"name": "delegate-stx", |
|||
"input_type": "uint, principal, (optional uint), (optional (tuple (hashbytes (buff 20)) (version (buff 1))))", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(delegate-stx amount-ustx delegate-to until-burn-ht pox-addr)", |
|||
"description": "Delegate to `delegate-to` the ability to stack from a given address.\nThis method _does not_ lock the funds, rather, it allows the delegate to issue the stacking lock.\n\nThe caller specifies:\n * amount-ustx: the total amount of ustx the delegate may be allowed to lock\n * until-burn-ht: an optional burn height at which this delegation expiration\n * pox-addr: an optional address to which any rewards *must* be sent" |
|||
}, |
|||
{ |
|||
"name": "disallow-contract-caller", |
|||
"input_type": "principal", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(disallow-contract-caller caller)", |
|||
"description": "Revokes authorization from a contract to invoke stacking methods through contract-calls" |
|||
}, |
|||
{ |
|||
"name": "reject-pox", |
|||
"input_type": "", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(reject-pox)", |
|||
"description": "Reject Stacking for this reward cycle.\n`tx-sender` votes all its uSTX for rejection.\nNote that unlike Stacking, rejecting PoX does not lock the tx-sender's tokens: PoX rejection acts like a coin vote." |
|||
}, |
|||
{ |
|||
"name": "revoke-delegate-stx", |
|||
"input_type": "", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(revoke-delegate-stx)", |
|||
"description": "Revoke a Stacking delegate relationship. A particular Stacker may only have one delegate,\nso this method does not take any parameters, and just revokes the Stacker's current delegate (if one exists)." |
|||
}, |
|||
{ |
|||
"name": "stack-aggregation-commit", |
|||
"input_type": "(tuple (hashbytes (buff 20)) (version (buff 1))), uint", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(stack-aggregation-commit pox-addr reward-cycle)", |
|||
"description": "Commit partially stacked STX.\n\nThis allows a stacker/delegate to lock fewer STX than the minimal threshold in multiple transactions,\nso long as:\n 1. The pox-addr is the same.\n 2. This \"commit\" transaction is called _before_ the PoX anchor block.\nThis ensures that each entry in the reward set returned to the stacks-node is greater than the threshold,\n but does not require it be all locked up within a single transaction" |
|||
}, |
|||
{ |
|||
"name": "stack-stx", |
|||
"input_type": "uint, (tuple (hashbytes (buff 20)) (version (buff 1))), uint", |
|||
"output_type": "(response (tuple (lock-amount uint) (stacker principal) (unlock-burn-height uint)) int)", |
|||
"signature": "(stack-stx amount-ustx pox-addr lock-period)", |
|||
"description": "Lock up some uSTX for stacking! Note that the given amount here is in micro-STX (uSTX).\nThe STX will be locked for the given number of reward cycles (lock-period).\nThis is the self-service interface. tx-sender will be the Stacker.\n\n* The given stacker cannot currently be stacking.\n* You will need the minimum uSTX threshold. This isn't determined until the reward cycle begins, but this\n method still requires stacking over the _absolute minimum_ amount, which can be obtained by calling `get-stacking-minimum`.\n\nThe tokens will unlock and be returned to the Stacker (tx-sender) automatically." |
|||
} |
|||
], |
|||
"read_only_functions": [ |
|||
{ |
|||
"name": "can-stack-stx", |
|||
"input_type": "(tuple (hashbytes (buff 20)) (version (buff 1))), uint, uint, uint", |
|||
"output_type": "(response bool int)", |
|||
"signature": "(can-stack-stx pox-addr amount-ustx first-reward-cycle num-cycles)", |
|||
"description": "Evaluate if a participant can stack an amount of STX for a given period." |
|||
}, |
|||
{ |
|||
"name": "get-pox-info", |
|||
"input_type": "", |
|||
"output_type": "(response (tuple (current-rejection-votes uint) (first-burnchain-block-height uint) (min-amount-ustx uint) (prepare-cycle-length uint) (rejection-fraction uint) (reward-cycle-id uint) (reward-cycle-length uint) (total-liquid-supply-ustx uint)) UnknownType)", |
|||
"signature": "(get-pox-info)", |
|||
"description": "Returns information about PoX status." |
|||
}, |
|||
{ |
|||
"name": "get-pox-rejection", |
|||
"input_type": "principal, uint", |
|||
"output_type": "(optional (tuple (amount uint)))", |
|||
"signature": "(get-pox-rejection stacker reward-cycle)", |
|||
"description": "Returns the amount of uSTX that a given principal used to reject a PoX cycle." |
|||
}, |
|||
{ |
|||
"name": "get-stacker-info", |
|||
"input_type": "principal", |
|||
"output_type": "(optional (tuple (amount-ustx uint) (first-reward-cycle uint) (lock-period uint) (pox-addr (tuple (hashbytes (buff 20)) (version (buff 1))))))", |
|||
"signature": "(get-stacker-info stacker)", |
|||
"description": "Returns the _current_ stacking information for `stacker. If the information\nis expired, or if there's never been such a stacker, then returns none." |
|||
}, |
|||
{ |
|||
"name": "get-stacking-minimum", |
|||
"input_type": "", |
|||
"output_type": "uint", |
|||
"signature": "(get-stacking-minimum)", |
|||
"description": "Returns the absolute minimum amount that could be validly Stacked (the threshold to Stack in\na given reward cycle may be higher than this" |
|||
}, |
|||
{ |
|||
"name": "get-total-ustx-stacked", |
|||
"input_type": "uint", |
|||
"output_type": "uint", |
|||
"signature": "(get-total-ustx-stacked reward-cycle)", |
|||
"description": "Returns the amount of currently participating uSTX in the given cycle." |
|||
}, |
|||
{ |
|||
"name": "is-pox-active", |
|||
"input_type": "uint", |
|||
"output_type": "bool", |
|||
"signature": "(is-pox-active reward-cycle)", |
|||
"description": "Returns whether or not PoX has been rejected at a given PoX cycle." |
|||
} |
|||
], |
|||
"error_codes": [ |
|||
{ |
|||
"name": "ERR_DELEGATION_EXPIRES_DURING_LOCK", |
|||
"type": "int", |
|||
"value": "21" |
|||
}, |
|||
{ |
|||
"name": "ERR_DELEGATION_POX_ADDR_REQUIRED", |
|||
"type": "int", |
|||
"value": "23" |
|||
}, |
|||
{ |
|||
"name": "ERR_DELEGATION_TOO_MUCH_LOCKED", |
|||
"type": "int", |
|||
"value": "22" |
|||
}, |
|||
{ |
|||
"name": "ERR_NOT_ALLOWED", |
|||
"type": "int", |
|||
"value": "19" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_ALREADY_DELEGATED", |
|||
"type": "int", |
|||
"value": "20" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_ALREADY_REJECTED", |
|||
"type": "int", |
|||
"value": "17" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_ALREADY_STACKED", |
|||
"type": "int", |
|||
"value": "3" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_EXPIRED", |
|||
"type": "int", |
|||
"value": "5" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_INSUFFICIENT_FUNDS", |
|||
"type": "int", |
|||
"value": "1" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_INVALID_AMOUNT", |
|||
"type": "int", |
|||
"value": "18" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_INVALID_LOCK_PERIOD", |
|||
"type": "int", |
|||
"value": "2" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_INVALID_POX_ADDRESS", |
|||
"type": "int", |
|||
"value": "13" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_NO_SUCH_PRINCIPAL", |
|||
"type": "int", |
|||
"value": "4" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_PERMISSION_DENIED", |
|||
"type": "int", |
|||
"value": "9" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_POX_ADDRESS_IN_USE", |
|||
"type": "int", |
|||
"value": "12" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_STX_LOCKED", |
|||
"type": "int", |
|||
"value": "6" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_THRESHOLD_NOT_MET", |
|||
"type": "int", |
|||
"value": "11" |
|||
}, |
|||
{ |
|||
"name": "ERR_STACKING_UNREACHABLE", |
|||
"type": "int", |
|||
"value": "255" |
|||
} |
|||
] |
|||
} |
|||
} |
@ -0,0 +1,118 @@ |
|||
import { renderMdx } from '@common/data/mdx'; |
|||
import STACKING_REFERENCE from '../../_data/boot-contracts-reference.json'; |
|||
|
|||
const wrapInClarityTicks = (string: string) => { |
|||
let newString = '```clarity'; |
|||
newString += ` |
|||
`;
|
|||
newString += string.trim(); |
|||
newString += ` |
|||
`;
|
|||
newString += '```'; |
|||
return newString; |
|||
}; |
|||
|
|||
const inlineCode = (string: string) => { |
|||
let newString = '`'; |
|||
newString += string.trim(); |
|||
newString += '`'; |
|||
|
|||
if (newString === '``') { |
|||
newString = ''; |
|||
} |
|||
|
|||
return newString; |
|||
}; |
|||
|
|||
const generateMarkdown = () => { |
|||
let publicFunctions = ''; |
|||
let readonlyFunctions = ''; |
|||
let errorCodes = ''; |
|||
|
|||
STACKING_REFERENCE.pox.public_functions.forEach(entry => { |
|||
publicFunctions += ` |
|||
### ${entry.name} |
|||
|
|||
**Signature:** ${inlineCode(entry.signature)} |
|||
|
|||
|
|||
**Input:** ${inlineCode(entry.input_type)} |
|||
|
|||
|
|||
**Output:** ${inlineCode(entry.output_type)} |
|||
|
|||
${entry.description.trim()} |
|||
`;
|
|||
}); |
|||
|
|||
STACKING_REFERENCE.pox.read_only_functions.forEach(entry => { |
|||
readonlyFunctions += ` |
|||
### ${entry.name} |
|||
|
|||
**Signature:** ${inlineCode(entry.signature)} |
|||
|
|||
|
|||
**Input:** ${inlineCode(entry.input_type)} |
|||
|
|||
|
|||
**Output:** ${inlineCode(entry.output_type)} |
|||
|
|||
${entry.description.trim()} |
|||
`;
|
|||
}); |
|||
|
|||
STACKING_REFERENCE.pox.error_codes.forEach(entry => { |
|||
errorCodes += `### ${entry.name} |
|||
|
|||
**Type:** ${inlineCode(entry.type)} |
|||
|
|||
**Value:** ${inlineCode(entry.value)} |
|||
`;
|
|||
}); |
|||
|
|||
return { |
|||
publicFunctions, |
|||
readonlyFunctions, |
|||
errorCodes, |
|||
}; |
|||
}; |
|||
|
|||
const getHeadings = arr => |
|||
arr.map(entry => ({ |
|||
content: entry.name, |
|||
level: 1, |
|||
})); |
|||
|
|||
export const convertStackingRefToMdx = async () => { |
|||
const markdown = generateMarkdown(); |
|||
const [_publicFunctions, _readonlyFunctions, _errorCodes] = await Promise.all([ |
|||
renderMdx(markdown.publicFunctions), |
|||
renderMdx(markdown.readonlyFunctions), |
|||
renderMdx(markdown.errorCodes), |
|||
]); |
|||
|
|||
const publicFunctions = { |
|||
content: _publicFunctions, |
|||
headings: getHeadings(STACKING_REFERENCE.pox.public_functions), |
|||
}; |
|||
|
|||
const readonlyFunctions = { |
|||
content: _readonlyFunctions, |
|||
headings: getHeadings(STACKING_REFERENCE.pox.read_only_functions), |
|||
}; |
|||
|
|||
const errorCodes = { |
|||
content: _errorCodes, |
|||
headings: getHeadings(STACKING_REFERENCE.pox.error_codes), |
|||
}; |
|||
|
|||
return { |
|||
props: { |
|||
mdx: { |
|||
publicFunctions, |
|||
readonlyFunctions, |
|||
errorCodes, |
|||
}, |
|||
}, |
|||
}; |
|||
}; |
@ -0,0 +1,27 @@ |
|||
import React from 'react'; |
|||
import { Components } from '@components/mdx/mdx-components'; |
|||
import { TableOfContents } from '@components/toc'; |
|||
import hydrate from 'next-mdx-remote/hydrate'; |
|||
import { space } from '@stacks/ui'; |
|||
|
|||
export const StackingErrorcodeReference = React.memo(({ content, headings }: any) => { |
|||
return ( |
|||
<> |
|||
<TableOfContents mb={space('extra-loose')} label="Contents" headings={headings} /> |
|||
{hydrate(content, { components: Components })} |
|||
</> |
|||
); |
|||
}); |
|||
export const StackingFunctionReference = React.memo(({ content, headings }: any) => { |
|||
return ( |
|||
<> |
|||
<TableOfContents |
|||
mb={space('extra-loose')} |
|||
columns={[2, 2, 3]} |
|||
label="Contents" |
|||
headings={headings} |
|||
/> |
|||
{hydrate(content, { components: Components })} |
|||
</> |
|||
); |
|||
}); |
@ -0,0 +1,23 @@ |
|||
--- |
|||
title: Stacking Contract |
|||
description: See a detailed list of all functions and error codes of the Stacking contract. |
|||
--- |
|||
|
|||
export { convertStackingRefToMdx as getStaticProps } from '@common/data/stacking-ref' |
|||
import { StackingErrorcodeReference, StackingFunctionReference } from '@components/stacking-ref' |
|||
|
|||
Stacking is implemented as a smart contract using Clarity. On the testnet, you can always find the Stacking contract by this contract identifier: `ST000000000000000000002AMW42H.pox`. |
|||
|
|||
Below is a list of public and read-only functions as well as error codes that can be returned by those methods. |
|||
|
|||
## Public functions |
|||
|
|||
<StackingFunctionReference {...props.mdx.publicFunctions} /> |
|||
|
|||
## Read-only functions |
|||
|
|||
<StackingFunctionReference {...props.mdx.readonlyFunctions} /> |
|||
|
|||
## Error codes |
|||
|
|||
<StackingErrorcodeReference {...props.mdx.errorCodes} /> |
Loading…
Reference in new issue