feature: Snapshot block height will be asked for setting up the FT voting.

This commit is contained in:
Raja Ilayaperumal
2024-11-10 14:59:56 +05:30
parent 0eb066fea8
commit 6f24c0ad79
10 changed files with 658 additions and 236 deletions

View File

@@ -146,5 +146,9 @@ export const Constants = {
"name": "Weighted Voting", "name": "Weighted Voting",
"link": "https://docs.ballot.gg/ballot.gg/voting-system/weighted-voting" "link": "https://docs.ballot.gg/ballot.gg/voting-system/weighted-voting"
} }
} },
// Ballot.gg wallet address for donations
MAINNET_DONATION_ADDRESS: "SP1FQ3G3MYSXW68CWPY4GW342T3Y9HQCCXXCKENPH",
TESTNET_DONATION_ADDRESS: "ST2FYE64JK2NMRS1640FE9SKJS37CYYJ3B1EHB6AR",
}; };

View File

@@ -39,41 +39,44 @@ export default function BuilderComponent(props) {
const [currentProgressMessage, setCurrentProgressMessage] = useState(); const [currentProgressMessage, setCurrentProgressMessage] = useState();
// Current block height
const [currentBlockHeight, setCurrentBlockHeight] = useState(0);
// On page load
useEffect(() => {
getCurrentBlockHeight();
}, []);
// Functions // Functions
useEffect(() => { useEffect(() => {
let _pollId, _mode, isCancelled = false; let isCancelled = false;
if (pathParams && pathParams?.[0]) { if (pathParams && pathParams?.[0]) {
_pollId = pathParams[0]; setPollId(pathParams[0]);
setPollId(_pollId);
} }
if (pathParams && pathParams?.[1]) { if (pathParams && pathParams?.[1]) {
_mode = pathParams[1]; setMode(pathParams[1]);
setMode(_mode);
} else { } else {
setMode(""); setMode("");
} }
// Fetch from Gaia // Initialize new poll
if (_pollId) { if (pathParams?.[0] === "new") {
if (_pollId === "new") { setPollObject(initializeNewPoll());
// Initialize new poll } else if (pathParams?.[1] === "draft") {
setPollObject(initializeNewPoll()); // Fetch from Gaia
} else if (_mode === "draft") { getFileFromGaia(pathParams[0] + ".json", {}).then(
getFileFromGaia(_pollId + ".json", {}).then( (response) => {
(response) => { if (response && !isCancelled) {
if (response && !isCancelled) { setPollObject(JSON.parse(response));
setPollObject(JSON.parse(response)); }
} }, (error) => {
}, // File does not exit in gaia
(error) => { if (error && error.code == "does_not_exist" && !isCancelled) {
// File does not exit in gaia // Initialize new poll
if (error && error.code == "does_not_exist" && !isCancelled) { setPollObject(initializeNewPoll());
// Initialize new poll }
setPollObject(initializeNewPoll()); });
}
});
}
} }
return () => { return () => {
@@ -112,6 +115,12 @@ export default function BuilderComponent(props) {
} }
} }
const getCurrentBlockHeight = async () => {
// Get current block height
const currentBlock = await getRecentBlock();
setCurrentBlockHeight(currentBlock?.height || 0);
}
const handleChange = e => { const handleChange = e => {
const { name, value } = e.target; const { name, value } = e.target;
@@ -125,10 +134,12 @@ export default function BuilderComponent(props) {
pollObject["strategyTokenName"] = strategyTemplate["strategyTokenName"]; pollObject["strategyTokenName"] = strategyTemplate["strategyTokenName"];
pollObject["strategyContractName"] = strategyTemplate["strategyContractName"]; pollObject["strategyContractName"] = strategyTemplate["strategyContractName"];
pollObject["strategyTokenDecimals"] = strategyTemplate["strategyTokenDecimals"]; pollObject["strategyTokenDecimals"] = strategyTemplate["strategyTokenDecimals"];
pollObject["snapshotBlockHeight"] = strategyTemplate["snapshotBlockHeight"];
} else { } else {
pollObject["strategyTokenName"] = ""; pollObject["strategyTokenName"] = "";
pollObject["strategyContractName"] = ""; pollObject["strategyContractName"] = "";
pollObject["strategyTokenDecimals"] = ""; pollObject["strategyTokenDecimals"] = "";
pollObject["snapshotBlockHeight"] = 0;
} }
} }
@@ -136,6 +147,9 @@ export default function BuilderComponent(props) {
if (!value && pollObject) { if (!value && pollObject) {
// Delete key from JSON // Delete key from JSON
delete pollObject[name]; delete pollObject[name];
} else if (name == "startAtBlock" || name == "endAtBlock" || name == "snapshotBlockHeight") {
// Update the value
pollObject[name] = parseInt(value);
} else { } else {
// Update the value // Update the value
pollObject[name] = value; pollObject[name] = value;
@@ -190,8 +204,7 @@ export default function BuilderComponent(props) {
if (response) { if (response) {
updatePollIndex(JSON.parse(response)); updatePollIndex(JSON.parse(response));
} }
}, }, (error) => {
(error) => {
// File does not exit in gaia // File does not exit in gaia
if (error && error.code == "does_not_exist") { if (error && error.code == "does_not_exist") {
// Initialize new // Initialize new
@@ -272,14 +285,15 @@ export default function BuilderComponent(props) {
} }
} }
// Check for start and end date // Check for start and end block
if (!pollObject?.startAtDate || !pollObject?.endAtDate) { if (!pollObject?.startAtBlock || !pollObject?.endAtBlock) {
return "Please select poll start and end date." return "Please enter start and end block height."
} else if (new Date() > new Date(pollObject?.startAtDate)) { } else if (pollObject?.startAtBlock < currentBlockHeight) {
return "Start date should be a future date." return "Start block should be greater than current block height."
} else if (new Date() > new Date(pollObject?.endAtDate) || } else if (pollObject?.startAtBlock > pollObject?.endAtBlock) {
new Date(pollObject?.startAtDate) > new Date(pollObject?.endAtDate)) { return "End block should be greater than start block height."
return "End date should be greater than start date." } else if (pollObject?.endAtBlock <= pollObject?.startAtBlock) {
return "End block should be greater than start block height."
} }
// Check for voting strategy template // Check for voting strategy template
@@ -296,6 +310,14 @@ export default function BuilderComponent(props) {
(!pollObject?.strategyTokenDecimals || !Number.isInteger(parseInt(pollObject?.strategyTokenDecimals)))) { (!pollObject?.strategyTokenDecimals || !Number.isInteger(parseInt(pollObject?.strategyTokenDecimals)))) {
return "Please enter positive integer value for strategy decimals" return "Please enter positive integer value for strategy decimals"
} }
// Fungible token
if (pollObject?.votingStrategyFlag && pollObject?.strategyTokenType == "ft") {
// Check for snapshotBlockHeight
if ((!pollObject?.snapshotBlockHeight || !Number.isInteger(parseInt(pollObject?.snapshotBlockHeight))) || pollObject?.snapshotBlockHeight <= 0) {
return "Please enter positive integer value for snapshot block height"
}
}
} catch (e) { } catch (e) {
return "Please enter positive integer value for strategy decimals" return "Please enter positive integer value for strategy decimals"
} }
@@ -316,6 +338,18 @@ export default function BuilderComponent(props) {
return 0; return 0;
} }
const calculateDate = (blockHeight, currentBlockHeight) => {
if (blockHeight && currentBlockHeight && blockHeight > 0 && currentBlockHeight > 0 &&
blockHeight > currentBlockHeight) {
const diff = blockHeight - currentBlockHeight;
const minutes = diff * 10;
return new Date(new Date().getTime() + (minutes * 60 * 1000));
}
return new Date();
}
const publishPoll = async () => { const publishPoll = async () => {
// Start processing // Start processing
setIsProcessing(true); setIsProcessing(true);
@@ -336,15 +370,12 @@ export default function BuilderComponent(props) {
// Show message // Show message
setCurrentProgressMessage("Publishing contract ..."); setCurrentProgressMessage("Publishing contract ...");
// Get current Block // Calculate stand and end time based on block height
const currentBlock = await getRecentBlock(); if (pollObject?.startAtBlock) {
pollObject['startAtDate'] = calculateDate(pollObject?.startAtBlock, currentBlockHeight);
// Calculate block time
if (pollObject?.startAtDate) {
pollObject['startAtBlock'] = calculateBlockTime(new Date(pollObject?.startAtDate).getTime(), currentBlock?.height);
} }
if (pollObject?.endAtDate) { if (pollObject?.endAtBlock) {
pollObject['endAtBlock'] = calculateBlockTime(new Date(pollObject?.endAtDate).getTime(), currentBlock?.height); pollObject['endAtDate'] = calculateDate(pollObject?.endAtBlock, currentBlockHeight);
} }
// Convert local date to ISO date // Convert local date to ISO date
@@ -520,25 +551,29 @@ export default function BuilderComponent(props) {
{/* Voting Period */} {/* Voting Period */}
<Form.Group className="mb-3"> <Form.Group className="mb-3">
<Form.Label className='ballot_labels'>Voting period</Form.Label> <Form.Label className='ballot_labels'>
Voting period
</Form.Label>
{/* By Block Height */}
<div style={{ display: "flex", flexWrap: "wrap", columnGap: "20px" }}> <div style={{ display: "flex", flexWrap: "wrap", columnGap: "20px" }}>
<Form.Group className="mb-3"> <Form.Group>
<Form.Label style={{ width: "50px" }} className='ballot_labels'>Start *</Form.Label> <Form.Label style={{ width: "150px" }} className='ballot_labels'>Start block height *</Form.Label>
<Form.Control type="datetime-local" name="startAtDate" value={pollObject.startAtDate} style={{ width: "250px" }} <Form.Control type="number" name="startAtBlock" value={pollObject.startAtBlock} style={{ width: "250px" }}
min={new Date().toISOString().slice(0, 16)}
onChange={handleChange} className="ballot_input" /> onChange={handleChange} className="ballot_input" />
</Form.Group> </Form.Group>
<Form.Group className="mb-3"> <Form.Group>
<Form.Label style={{ width: "50px" }} className='ballot_labels'>End *</Form.Label> <Form.Label style={{ width: "150px" }} className='ballot_labels'>End block height *</Form.Label>
<Form.Control type="datetime-local" name="endAtDate" value={pollObject.endAtDate} style={{ width: "250px" }} <Form.Control type="number" name="endAtBlock" value={pollObject.endAtBlock} style={{ width: "250px" }}
onChange={handleChange} disabled={!pollObject?.startAtDate} min={pollObject?.startAtDate} className="ballot_input" /> onChange={handleChange} className="ballot_input" />
</Form.Group> </Form.Group>
<small className="form-text text-muted" style={{ fontSize: "12px" }}>
The start and End date with time are stored in ISO date format(2022-10-21T17:19). It will be converted to a local date format for displaying.
</small>
</div> </div>
<small className="form-text text-muted" style={{ fontSize: "12px" }}>
{/* The start and End date with time are stored in ISO date format(2022-10-21T17:19). It will be converted to a local date format for displaying. */}
Current Block Height: <span style={{ fontWeight: 'bold' }}>{currentBlockHeight}</span>
</small>
</Form.Group> </Form.Group>
{/* Voting Strategy */} {/* Voting Strategy */}
@@ -621,6 +656,18 @@ export default function BuilderComponent(props) {
} }
</> </>
} }
{/* Fungible Token - Snapshot block height */}
{pollObject?.strategyTokenType == "ft" &&
<>
<Form.Group className="mb-3">
<Form.Label className='ballot_labels'>Snapshot block height</Form.Label>
<Form.Control type="number" name="snapshotBlockHeight" value={pollObject.snapshotBlockHeight}
onChange={handleChange}
placeholder="0" className="ballot_input" min="0" />
</Form.Group>
</>
}
</> </>
} }
</Form> </Form>
@@ -651,7 +698,7 @@ export default function BuilderComponent(props) {
{/* Error Message */} {/* Error Message */}
{errorMessage && {errorMessage &&
<div style={{ marginTop: "10px" }}> <div style={{ marginTop: "10px" }}>
<span style={{ fontSize: "14px" }}>{errorMessage}</span> <span style={{ fontSize: "14px", color: 'red' }}>{errorMessage}</span>
</div> </div>
} }
</div> </div>

View File

@@ -1,12 +1,12 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { Table } from "react-bootstrap"; import { Table } from "react-bootstrap";
import { Constants } from "../../common/constants"; import { Constants } from "../../common/constants";
import { convertToDisplayDateFormat, formStacksExplorerUrl, formatUtcDateTime } from "../../services/utils"; import { calculateDateByBlockHeight, convertToDisplayDateFormat, formStacksExplorerUrl, formatUtcDateTime } from "../../services/utils";
export default function InformationComponent(props) { export default function InformationComponent(props) {
// Variables // Variables
const { pollObject, resultsByOption } = props; const { pollObject, resultsByOption, currentBlockHeight } = props;
const [votingSystemInfo, setVotingSystemInfo] = useState(); const [votingSystemInfo, setVotingSystemInfo] = useState();
// Function // Function
@@ -104,10 +104,23 @@ export default function InformationComponent(props) {
Voting System <span style={{ float: "right", fontWeight: "bold", textTransform: "capitalize" }}>{votingSystemInfo?.name}</span> Voting System <span style={{ float: "right", fontWeight: "bold", textTransform: "capitalize" }}>{votingSystemInfo?.name}</span>
</div> </div>
<div> <div>
Start Date <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.startAtDateUTC ? (formatUtcDateTime(pollObject?.startAtDateUTC) + " UTC") : convertToDisplayDateFormat(pollObject?.startAtDate)}</span> Start Date
<span style={{ float: "right", fontWeight: "bold" }}>
{pollObject?.startAtDateUTC ? (formatUtcDateTime(pollObject?.startAtDateUTC) + " UTC") : convertToDisplayDateFormat(pollObject?.startAtDate)}
</span>
</div> </div>
<div> <div>
End Date <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.endAtDateUTC ? (formatUtcDateTime(pollObject?.endAtDateUTC) + " UTC") : convertToDisplayDateFormat(pollObject?.endAtDate)}</span> End Date
<span style={{ float: "right", fontWeight: "bold" }}>
{pollObject?.endAtBlock && currentBlockHeight < pollObject?.endAtBlock ?
<>
{formatUtcDateTime(calculateDateByBlockHeight(currentBlockHeight, pollObject?.endAtBlock))} UTC
</> :
<>
{pollObject?.endAtDateUTC ? (formatUtcDateTime(pollObject?.endAtDateUTC) + " UTC") : convertToDisplayDateFormat(pollObject?.endAtDate)}
</>
}
</span>
</div> </div>
<div> <div>
Start Block <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.startAtBlock}</span> Start Block <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.startAtBlock}</span>
@@ -115,6 +128,9 @@ export default function InformationComponent(props) {
<div> <div>
End Block <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.endAtBlock}</span> End Block <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.endAtBlock}</span>
</div> </div>
<div>
Current Block <span style={{ float: "right", fontWeight: "bold" }}>{currentBlockHeight}</span>
</div>
{pollObject?.contractAddress && {pollObject?.contractAddress &&
<div> <div>
Contract Address <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.contractAddress}</span> Contract Address <span style={{ float: "right", fontWeight: "bold" }}>{pollObject?.contractAddress}</span>

View File

@@ -27,7 +27,8 @@ export default function PollComponent(props) {
publicUrl, publicUrl,
txStatus, txStatus,
noOfResultsLoaded, noOfResultsLoaded,
setNoOfResultsLoaded } = props; setNoOfResultsLoaded,
currentBlockHeight } = props;
const [voteObject, setVoteObject] = useState({}); const [voteObject, setVoteObject] = useState({});
const [errorMessage, setErrorMessage] = useState(); const [errorMessage, setErrorMessage] = useState();
const [txId, setTxId] = useState(); const [txId, setTxId] = useState();
@@ -267,8 +268,9 @@ export default function PollComponent(props) {
<div style={{ display: "flex", alignItems: "center", marginTop: "30px" }}> <div style={{ display: "flex", alignItems: "center", marginTop: "30px" }}>
<Button variant="dark" <Button variant="dark"
disabled={(isPreview || !holdingTokenIdsArray || alreadyVoted || isProcessing || disabled={(isPreview || !holdingTokenIdsArray || alreadyVoted || isProcessing ||
((pollObject?.startAtDate || pollObject?.startAtDateUTC) && (new Date(pollObject?.startAtDateUTC ? pollObject?.startAtDateUTC : pollObject?.startAtDate) > new Date())) || (!currentBlockHeight || currentBlockHeight < pollObject?.startAtBlock) ||
((pollObject?.endAtDate || pollObject?.endAtDateUTC) && (new Date(pollObject?.endAtDateUTC ? pollObject?.endAtDateUTC : pollObject?.endAtDate) < new Date()))) ? true : false} (!currentBlockHeight || currentBlockHeight > pollObject?.endAtBlock)
) ? true : false}
onClick={() => { castMyVote() }}> onClick={() => { castMyVote() }}>
Vote Vote
</Button> </Button>
@@ -401,7 +403,7 @@ export default function PollComponent(props) {
{/* Right Side */} {/* Right Side */}
<div className="col-sm-12 col-md-4"> <div className="col-sm-12 col-md-4">
{/* Information */} {/* Information */}
<InformationComponent pollObject={pollObject} resultsByOption={resultsByOption} /> <InformationComponent pollObject={pollObject} resultsByOption={resultsByOption} currentBlockHeight={currentBlockHeight} />
</div> </div>
</div> </div>
</div> </div>

390
package-lock.json generated
View File

@@ -8,10 +8,10 @@
"name": "ballot", "name": "ballot",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@stacks/connect": "^7.7.1", "@stacks/connect": "^7.8.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/storage": "^6.12.0", "@stacks/storage": "^6.17.0",
"@stacks/transactions": "^6.12.0", "@stacks/transactions": "^6.17.0",
"bootstrap": "^5.2.0", "bootstrap": "^5.2.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"nanoid": "^4.0.0", "nanoid": "^4.0.0",
@@ -482,57 +482,129 @@
} }
}, },
"node_modules/@stacks/auth": { "node_modules/@stacks/auth": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.17.0.tgz",
"integrity": "sha512-ViSpeWNw1MJBtvykcPTcn9vTy9v8pK8jiQFjfOkiFQ0q+oEhIDQrtpN5OYtTh5HvoZk8du+43nIoUYUECNahHQ==", "integrity": "sha512-SaxB6ULkYLRd5WZotymlPzroBn5/28KgJOTY0nKDcwCqxSkYjPZepweA30LK5eUOmePuGILaMTagj1ibZRnvUg==",
"dependencies": { "dependencies": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/encryption": "^6.12.0", "@stacks/encryption": "^6.17.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/profile": "^6.12.0", "@stacks/profile": "^6.17.0",
"cross-fetch": "^3.1.5", "cross-fetch": "^3.1.5",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
} }
}, },
"node_modules/@stacks/common": { "node_modules/@stacks/common": {
"version": "6.10.0", "version": "6.16.0",
"resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.10.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz",
"integrity": "sha512-6x5Z7AKd9/kj3+DYE9xIDIkFLHihBH614i2wqrZIjN02WxVo063hWSjIlUxlx8P4gl6olVzlOy5LzhLJD9OP0A==", "integrity": "sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==",
"dependencies": { "dependencies": {
"@types/bn.js": "^5.1.0", "@types/bn.js": "^5.1.0",
"@types/node": "^18.0.4" "@types/node": "^18.0.4"
} }
}, },
"node_modules/@stacks/connect": { "node_modules/@stacks/connect": {
"version": "7.7.1", "version": "7.8.0",
"resolved": "https://registry.npmjs.org/@stacks/connect/-/connect-7.7.1.tgz", "resolved": "https://registry.npmjs.org/@stacks/connect/-/connect-7.8.0.tgz",
"integrity": "sha512-MwLRhgRLOGo0Y4IDC0qp9RUX2SZubgse1aI2TN/fz2abNIh1LgmOKUua3w17YiBEZxDD9nyQ4KW1c33bdnrOPw==", "integrity": "sha512-whwHygS69XyY/LMvlyp0Whu4mkWkFoJ4Z/Bva9aO1xLLyEVDbKLZnslGWmPs1Io/y76oGEorqVEh0MeLymTIjg==",
"dependencies": { "dependencies": {
"@stacks/auth": "^6.1.1", "@stacks/auth": "^7.0.0-next.70",
"@stacks/connect-ui": "6.4.1", "@stacks/common": "^7.0.0-next.70",
"@stacks/network": "^6.1.1", "@stacks/connect-ui": "6.5.0",
"@stacks/profile": "^6.1.1", "@stacks/network": "^7.0.0-next.70",
"@stacks/transactions": "^6.1.1", "@stacks/network-v6": "npm:@stacks/network@^6.16.0",
"@stacks/profile": "^7.0.0-next.70",
"@stacks/transactions": "^7.0.0-next.70",
"@stacks/transactions-v6": "npm:@stacks/transactions@^6.16.0",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
} }
}, },
"node_modules/@stacks/connect-ui": { "node_modules/@stacks/connect-ui": {
"version": "6.4.1", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.4.1.tgz", "resolved": "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.5.0.tgz",
"integrity": "sha512-Y6Fp26MUsMQq08zFSWus40rS7RNHrHj6VDJrFUqM9VsksV3wftpsRcy7psQusUvW1DS7fPza67IlM1dcN4rvSg==", "integrity": "sha512-iXSpl2NxrjERBqtGgkZp0tX1uJgdWZXmsNo3I0cJYYTTbieSAE/Al9nTYc1wLTPW5w5oVvZEkQKo90WIrHR8Rw==",
"dependencies": { "dependencies": {
"@stencil/core": "^2.17.1" "@stencil/core": "^2.17.1"
} }
}, },
"node_modules/@stacks/encryption": { "node_modules/@stacks/connect/node_modules/@stacks/auth": {
"version": "6.12.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-7.0.0.tgz",
"integrity": "sha512-CubE51pHrcxx3yA+xapevPgA9UDleIoEaUZ06/9uD91B42yvTg37HyS8t06rzukU9q+X7Cv2I/+vbuf4nJIo8g==", "integrity": "sha512-p0/FJy5jRRgtsVzGpWDgNE0fi/ioPCL3S1tZHRsvdKO7moquHWnTlBV/9yVkGbd+V0kD95Sd0euX5pwWA82MhA==",
"dependencies": {
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^7.0.0",
"@stacks/encryption": "^7.0.0",
"@stacks/network": "^7.0.0",
"@stacks/profile": "^7.0.0",
"cross-fetch": "^3.1.5",
"jsontokens": "^4.0.1"
}
},
"node_modules/@stacks/connect/node_modules/@stacks/common": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/common/-/common-7.0.0.tgz",
"integrity": "sha512-/BKBK9S9GEuGjbnc2fBAwsG21f8cfNekG/9mXLSMwBqnh4qaQY2hxK+6wRI2YXJgpkXrpZilpZy2sdPGlVUdQA=="
},
"node_modules/@stacks/connect/node_modules/@stacks/encryption": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-7.0.0.tgz",
"integrity": "sha512-kQhiurn8s0DV6OALqEy2Aqwp2DNJUD41S1bnD/+UESyEDD5XRqL84MEo7mCL8pTPr+FVdhT+diEIPeAfEtbTPQ==",
"dependencies": { "dependencies": {
"@noble/hashes": "1.1.5", "@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1", "@noble/secp256k1": "1.7.1",
"@scure/bip39": "1.1.0", "@scure/bip39": "1.1.0",
"@stacks/common": "^6.10.0", "@stacks/common": "^7.0.0",
"base64-js": "^1.5.1",
"bs58": "^5.0.0",
"ripemd160-min": "^0.0.6",
"varuint-bitcoin": "^1.1.2"
}
},
"node_modules/@stacks/connect/node_modules/@stacks/network": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-7.0.0.tgz",
"integrity": "sha512-4diddT0ii85BQ4PW6ww3l4cS7Oo0a5VIsJ7umBcCPAArIc4Sm/MIOEXIg9joKK8fVHLnWyh1p4D+febJQFfa+Q==",
"dependencies": {
"@stacks/common": "^7.0.0",
"cross-fetch": "^3.1.5"
}
},
"node_modules/@stacks/connect/node_modules/@stacks/profile": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-7.0.0.tgz",
"integrity": "sha512-E9RDodVgcLBs6ZiV88lVQyDjA8ZDVPswbPpLNHeAA+evJ2GwRKMJrNnirjydMI37aWm3ZpYOEMLMbqdi38VR7w==",
"dependencies": {
"@stacks/common": "^7.0.0",
"@stacks/network": "^7.0.0",
"@stacks/transactions": "^7.0.0",
"jsontokens": "^4.0.1",
"schema-inspector": "^2.0.2",
"zone-file": "^2.0.0-beta.3"
}
},
"node_modules/@stacks/connect/node_modules/@stacks/transactions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-7.0.0.tgz",
"integrity": "sha512-9kGTnJLwRQPugLzbdJ8MmFED+eRhlJKIXpz2mshyy238hvBc4T0jynsoJMi4qGqvJYzsiRYCLDPJVkkUde85vA==",
"dependencies": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^7.0.0",
"@stacks/network": "^7.0.0",
"c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0"
}
},
"node_modules/@stacks/encryption": {
"version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.17.0.tgz",
"integrity": "sha512-c0+ZOjrAiB1fDCjXO6XqHdYgpeBeMYyeH+dWahpD1VQUDor2PE5Q47qyuibWmx36rLWt1M6wlaLdeVm6HlKGzw==",
"dependencies": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@scure/bip39": "1.1.0",
"@stacks/common": "^6.16.0",
"@types/node": "^18.0.4", "@types/node": "^18.0.4",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"bs58": "^5.0.0", "bs58": "^5.0.0",
@@ -541,49 +613,73 @@
} }
}, },
"node_modules/@stacks/network": { "node_modules/@stacks/network": {
"version": "6.11.3", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz", "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz",
"integrity": "sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==", "integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==",
"dependencies": { "dependencies": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"cross-fetch": "^3.1.5"
}
},
"node_modules/@stacks/network-v6": {
"name": "@stacks/network",
"version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz",
"integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==",
"dependencies": {
"@stacks/common": "^6.16.0",
"cross-fetch": "^3.1.5" "cross-fetch": "^3.1.5"
} }
}, },
"node_modules/@stacks/profile": { "node_modules/@stacks/profile": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.17.0.tgz",
"integrity": "sha512-eY5IpX+GGHIcYLkivDmf3mkxDIgTQ+LhU8UG4jvOqDi+e1DvF9cIi3+reG5KVo0pQzqyT1OS7+16AwVcgp7/og==", "integrity": "sha512-EoYe0NapFc6bgA+vyCVY2sYYRHk3pbsbRnm3eaSp8y9Drfy8dBqsM10W1jjTwOn0R+IMmDT52lojdW7Pw3c7Mw==",
"dependencies": { "dependencies": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/transactions": "^6.12.0", "@stacks/transactions": "^6.17.0",
"jsontokens": "^4.0.1", "jsontokens": "^4.0.1",
"schema-inspector": "^2.0.2", "schema-inspector": "^2.0.2",
"zone-file": "^2.0.0-beta.3" "zone-file": "^2.0.0-beta.3"
} }
}, },
"node_modules/@stacks/storage": { "node_modules/@stacks/storage": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.17.0.tgz",
"integrity": "sha512-RiB8cfWKCm4LrDLXdjtRj4syzvpwmJ/6WKcF+1RHQBTyJerPgxoBn1NoKzjOcydQvVj1jpR/ccaS78xVxlMsTQ==", "integrity": "sha512-vhgV8C+1UahSWrafOHh/ZnTVYs8JadLsh5OZCVgtxWXV7z8ruQzVN24eeXbR+C7Vme2YpDP210ly7Wyqxd755Q==",
"dependencies": { "dependencies": {
"@stacks/auth": "^6.12.0", "@stacks/auth": "^6.17.0",
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/encryption": "^6.12.0", "@stacks/encryption": "^6.17.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
} }
}, },
"node_modules/@stacks/transactions": { "node_modules/@stacks/transactions": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz",
"integrity": "sha512-gRP3SfTaAIoTdjMvOiLrMZb/senqB8JQlT5Y4C3/CiHhiprYwTx7TbOCSa7WsNOU99H4aNfHvatmymuggXQVkA==", "integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==",
"dependencies": { "dependencies": {
"@noble/hashes": "1.1.5", "@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1", "@noble/secp256k1": "1.7.1",
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0"
}
},
"node_modules/@stacks/transactions-v6": {
"name": "@stacks/transactions",
"version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz",
"integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==",
"dependencies": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^6.16.0",
"@stacks/network": "^6.17.0",
"c32check": "^2.0.0", "c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0" "lodash.clonedeep": "^4.5.0"
} }
@@ -4103,57 +4199,131 @@
} }
}, },
"@stacks/auth": { "@stacks/auth": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-6.17.0.tgz",
"integrity": "sha512-ViSpeWNw1MJBtvykcPTcn9vTy9v8pK8jiQFjfOkiFQ0q+oEhIDQrtpN5OYtTh5HvoZk8du+43nIoUYUECNahHQ==", "integrity": "sha512-SaxB6ULkYLRd5WZotymlPzroBn5/28KgJOTY0nKDcwCqxSkYjPZepweA30LK5eUOmePuGILaMTagj1ibZRnvUg==",
"requires": { "requires": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/encryption": "^6.12.0", "@stacks/encryption": "^6.17.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/profile": "^6.12.0", "@stacks/profile": "^6.17.0",
"cross-fetch": "^3.1.5", "cross-fetch": "^3.1.5",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
} }
}, },
"@stacks/common": { "@stacks/common": {
"version": "6.10.0", "version": "6.16.0",
"resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.10.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz",
"integrity": "sha512-6x5Z7AKd9/kj3+DYE9xIDIkFLHihBH614i2wqrZIjN02WxVo063hWSjIlUxlx8P4gl6olVzlOy5LzhLJD9OP0A==", "integrity": "sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==",
"requires": { "requires": {
"@types/bn.js": "^5.1.0", "@types/bn.js": "^5.1.0",
"@types/node": "^18.0.4" "@types/node": "^18.0.4"
} }
}, },
"@stacks/connect": { "@stacks/connect": {
"version": "7.7.1", "version": "7.8.0",
"resolved": "https://registry.npmjs.org/@stacks/connect/-/connect-7.7.1.tgz", "resolved": "https://registry.npmjs.org/@stacks/connect/-/connect-7.8.0.tgz",
"integrity": "sha512-MwLRhgRLOGo0Y4IDC0qp9RUX2SZubgse1aI2TN/fz2abNIh1LgmOKUua3w17YiBEZxDD9nyQ4KW1c33bdnrOPw==", "integrity": "sha512-whwHygS69XyY/LMvlyp0Whu4mkWkFoJ4Z/Bva9aO1xLLyEVDbKLZnslGWmPs1Io/y76oGEorqVEh0MeLymTIjg==",
"requires": { "requires": {
"@stacks/auth": "^6.1.1", "@stacks/auth": "^7.0.0-next.70",
"@stacks/connect-ui": "6.4.1", "@stacks/common": "^7.0.0-next.70",
"@stacks/network": "^6.1.1", "@stacks/connect-ui": "6.5.0",
"@stacks/profile": "^6.1.1", "@stacks/network": "^7.0.0-next.70",
"@stacks/transactions": "^6.1.1", "@stacks/network-v6": "npm:@stacks/network@^6.16.0",
"@stacks/profile": "^7.0.0-next.70",
"@stacks/transactions": "^7.0.0-next.70",
"@stacks/transactions-v6": "npm:@stacks/transactions@^6.16.0",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
},
"dependencies": {
"@stacks/auth": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/auth/-/auth-7.0.0.tgz",
"integrity": "sha512-p0/FJy5jRRgtsVzGpWDgNE0fi/ioPCL3S1tZHRsvdKO7moquHWnTlBV/9yVkGbd+V0kD95Sd0euX5pwWA82MhA==",
"requires": {
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^7.0.0",
"@stacks/encryption": "^7.0.0",
"@stacks/network": "^7.0.0",
"@stacks/profile": "^7.0.0",
"cross-fetch": "^3.1.5",
"jsontokens": "^4.0.1"
}
},
"@stacks/common": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/common/-/common-7.0.0.tgz",
"integrity": "sha512-/BKBK9S9GEuGjbnc2fBAwsG21f8cfNekG/9mXLSMwBqnh4qaQY2hxK+6wRI2YXJgpkXrpZilpZy2sdPGlVUdQA=="
},
"@stacks/encryption": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-7.0.0.tgz",
"integrity": "sha512-kQhiurn8s0DV6OALqEy2Aqwp2DNJUD41S1bnD/+UESyEDD5XRqL84MEo7mCL8pTPr+FVdhT+diEIPeAfEtbTPQ==",
"requires": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@scure/bip39": "1.1.0",
"@stacks/common": "^7.0.0",
"base64-js": "^1.5.1",
"bs58": "^5.0.0",
"ripemd160-min": "^0.0.6",
"varuint-bitcoin": "^1.1.2"
}
},
"@stacks/network": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-7.0.0.tgz",
"integrity": "sha512-4diddT0ii85BQ4PW6ww3l4cS7Oo0a5VIsJ7umBcCPAArIc4Sm/MIOEXIg9joKK8fVHLnWyh1p4D+febJQFfa+Q==",
"requires": {
"@stacks/common": "^7.0.0",
"cross-fetch": "^3.1.5"
}
},
"@stacks/profile": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-7.0.0.tgz",
"integrity": "sha512-E9RDodVgcLBs6ZiV88lVQyDjA8ZDVPswbPpLNHeAA+evJ2GwRKMJrNnirjydMI37aWm3ZpYOEMLMbqdi38VR7w==",
"requires": {
"@stacks/common": "^7.0.0",
"@stacks/network": "^7.0.0",
"@stacks/transactions": "^7.0.0",
"jsontokens": "^4.0.1",
"schema-inspector": "^2.0.2",
"zone-file": "^2.0.0-beta.3"
}
},
"@stacks/transactions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-7.0.0.tgz",
"integrity": "sha512-9kGTnJLwRQPugLzbdJ8MmFED+eRhlJKIXpz2mshyy238hvBc4T0jynsoJMi4qGqvJYzsiRYCLDPJVkkUde85vA==",
"requires": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^7.0.0",
"@stacks/network": "^7.0.0",
"c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0"
}
}
} }
}, },
"@stacks/connect-ui": { "@stacks/connect-ui": {
"version": "6.4.1", "version": "6.5.0",
"resolved": "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.4.1.tgz", "resolved": "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.5.0.tgz",
"integrity": "sha512-Y6Fp26MUsMQq08zFSWus40rS7RNHrHj6VDJrFUqM9VsksV3wftpsRcy7psQusUvW1DS7fPza67IlM1dcN4rvSg==", "integrity": "sha512-iXSpl2NxrjERBqtGgkZp0tX1uJgdWZXmsNo3I0cJYYTTbieSAE/Al9nTYc1wLTPW5w5oVvZEkQKo90WIrHR8Rw==",
"requires": { "requires": {
"@stencil/core": "^2.17.1" "@stencil/core": "^2.17.1"
} }
}, },
"@stacks/encryption": { "@stacks/encryption": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.17.0.tgz",
"integrity": "sha512-CubE51pHrcxx3yA+xapevPgA9UDleIoEaUZ06/9uD91B42yvTg37HyS8t06rzukU9q+X7Cv2I/+vbuf4nJIo8g==", "integrity": "sha512-c0+ZOjrAiB1fDCjXO6XqHdYgpeBeMYyeH+dWahpD1VQUDor2PE5Q47qyuibWmx36rLWt1M6wlaLdeVm6HlKGzw==",
"requires": { "requires": {
"@noble/hashes": "1.1.5", "@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1", "@noble/secp256k1": "1.7.1",
"@scure/bip39": "1.1.0", "@scure/bip39": "1.1.0",
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@types/node": "^18.0.4", "@types/node": "^18.0.4",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"bs58": "^5.0.0", "bs58": "^5.0.0",
@@ -4162,49 +4332,71 @@
} }
}, },
"@stacks/network": { "@stacks/network": {
"version": "6.11.3", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz", "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz",
"integrity": "sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==", "integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==",
"requires": { "requires": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"cross-fetch": "^3.1.5"
}
},
"@stacks/network-v6": {
"version": "npm:@stacks/network@6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz",
"integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==",
"requires": {
"@stacks/common": "^6.16.0",
"cross-fetch": "^3.1.5" "cross-fetch": "^3.1.5"
} }
}, },
"@stacks/profile": { "@stacks/profile": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/profile/-/profile-6.17.0.tgz",
"integrity": "sha512-eY5IpX+GGHIcYLkivDmf3mkxDIgTQ+LhU8UG4jvOqDi+e1DvF9cIi3+reG5KVo0pQzqyT1OS7+16AwVcgp7/og==", "integrity": "sha512-EoYe0NapFc6bgA+vyCVY2sYYRHk3pbsbRnm3eaSp8y9Drfy8dBqsM10W1jjTwOn0R+IMmDT52lojdW7Pw3c7Mw==",
"requires": { "requires": {
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/transactions": "^6.12.0", "@stacks/transactions": "^6.17.0",
"jsontokens": "^4.0.1", "jsontokens": "^4.0.1",
"schema-inspector": "^2.0.2", "schema-inspector": "^2.0.2",
"zone-file": "^2.0.0-beta.3" "zone-file": "^2.0.0-beta.3"
} }
}, },
"@stacks/storage": { "@stacks/storage": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/storage/-/storage-6.17.0.tgz",
"integrity": "sha512-RiB8cfWKCm4LrDLXdjtRj4syzvpwmJ/6WKcF+1RHQBTyJerPgxoBn1NoKzjOcydQvVj1jpR/ccaS78xVxlMsTQ==", "integrity": "sha512-vhgV8C+1UahSWrafOHh/ZnTVYs8JadLsh5OZCVgtxWXV7z8ruQzVN24eeXbR+C7Vme2YpDP210ly7Wyqxd755Q==",
"requires": { "requires": {
"@stacks/auth": "^6.12.0", "@stacks/auth": "^6.17.0",
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/encryption": "^6.12.0", "@stacks/encryption": "^6.17.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"jsontokens": "^4.0.1" "jsontokens": "^4.0.1"
} }
}, },
"@stacks/transactions": { "@stacks/transactions": {
"version": "6.12.0", "version": "6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.12.0.tgz", "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz",
"integrity": "sha512-gRP3SfTaAIoTdjMvOiLrMZb/senqB8JQlT5Y4C3/CiHhiprYwTx7TbOCSa7WsNOU99H4aNfHvatmymuggXQVkA==", "integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==",
"requires": { "requires": {
"@noble/hashes": "1.1.5", "@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1", "@noble/secp256k1": "1.7.1",
"@stacks/common": "^6.10.0", "@stacks/common": "^6.16.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0"
}
},
"@stacks/transactions-v6": {
"version": "npm:@stacks/transactions@6.17.0",
"resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz",
"integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==",
"requires": {
"@noble/hashes": "1.1.5",
"@noble/secp256k1": "1.7.1",
"@stacks/common": "^6.16.0",
"@stacks/network": "^6.17.0",
"c32check": "^2.0.0", "c32check": "^2.0.0",
"lodash.clonedeep": "^4.5.0" "lodash.clonedeep": "^4.5.0"
} }

View File

@@ -9,10 +9,10 @@
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"@stacks/connect": "^7.7.1", "@stacks/connect": "^7.8.0",
"@stacks/network": "^6.11.3", "@stacks/network": "^6.17.0",
"@stacks/storage": "^6.12.0", "@stacks/storage": "^6.17.0",
"@stacks/transactions": "^6.12.0", "@stacks/transactions": "^6.17.0",
"bootstrap": "^5.2.0", "bootstrap": "^5.2.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"nanoid": "^4.0.0", "nanoid": "^4.0.0",

View File

@@ -9,10 +9,11 @@ import { DashboardNavBarComponent } from "../components/common/DashboardNavBarCo
import PollComponent from "../components/poll/PollComponent"; import PollComponent from "../components/poll/PollComponent";
import { getIndividualResultByStartAndEndPosition } from "../components/poll/PollService"; import { getIndividualResultByStartAndEndPosition } from "../components/poll/PollService";
import { getMyStxAddress, getStacksAPIPrefix, userSession } from "../services/auth"; import { getMyStxAddress, getStacksAPIPrefix, userSession } from "../services/auth";
import { getRecentBlock } from "../services/utils";
export default function Poll(props) { export default function Poll(props) {
// Variables // Variables
const { pollObject, pollId, gaiaAddress } = props; const { pollObject, pollId, gaiaAddress, currentBlockHeight } = props;
// Contract transaction status // Contract transaction status
const [txStatus, setTxStatus] = useState(); const [txStatus, setTxStatus] = useState();
@@ -229,7 +230,8 @@ export default function Poll(props) {
// Fetch STX holdings // Fetch STX holdings
getSTXHolding(); getSTXHolding();
} else if (pollObject?.strategyContractName && pollObject?.strategyTokenName) { } else if (pollObject?.strategyContractName && pollObject?.strategyTokenName) {
const response = await fetch(`${getStacksAPIPrefix()}/extended/v1/address/${getMyStxAddress()}/balances`); const response = await fetch(`${getStacksAPIPrefix()}/extended/v1/address/${getMyStxAddress()}/balances` +
(pollObject?.snapshotBlockHeight ? "?until_block=" + pollObject?.snapshotBlockHeight : ""));
const responseObject = await response.json(); const responseObject = await response.json();
if (responseObject?.fungible_tokens && responseObject?.fungible_tokens?.[pollObject?.strategyContractName + "::" + pollObject?.strategyTokenName]) { if (responseObject?.fungible_tokens && responseObject?.fungible_tokens?.[pollObject?.strategyContractName + "::" + pollObject?.strategyTokenName]) {
@@ -260,7 +262,8 @@ export default function Poll(props) {
} }
const getSTXHolding = async () => { const getSTXHolding = async () => {
const response = await fetch(`${getStacksAPIPrefix()}/extended/v1/address/${getMyStxAddress()}/stx`); const response = await fetch(`${getStacksAPIPrefix()}/extended/v1/address/${getMyStxAddress()}/stx` +
(pollObject?.snapshotBlockHeight ? "?until_block=" + pollObject?.snapshotBlockHeight : ""));
const responseObject = await response.json(); const responseObject = await response.json();
if (responseObject?.balance !== "0") { if (responseObject?.balance !== "0") {
@@ -411,7 +414,8 @@ export default function Poll(props) {
dns={dns} alreadyVoted={alreadyVoted} noHoldingToken={noHoldingToken} dns={dns} alreadyVoted={alreadyVoted} noHoldingToken={noHoldingToken}
holdingTokenIdsArray={holdingTokenIdsArray} holdingTokenIdsArray={holdingTokenIdsArray}
votingPower={votingPower} publicUrl={publicUrl} txStatus={txStatus} votingPower={votingPower} publicUrl={publicUrl} txStatus={txStatus}
noOfResultsLoaded={noOfResultsLoaded} setNoOfResultsLoaded={setNoOfResultsLoaded} /> noOfResultsLoaded={noOfResultsLoaded} setNoOfResultsLoaded={setNoOfResultsLoaded}
currentBlockHeight={currentBlockHeight} />
</Col> </Col>
</Row> </Row>
</Container> </Container>
@@ -443,12 +447,17 @@ export async function getServerSideProps(context) {
pollObject = await response.json(); pollObject = await response.json();
} }
// Get current block height
const currentBlock = await getRecentBlock();
const currentBlockHeight = currentBlock?.height || 0;
// Pass data to the page via props // Pass data to the page via props
return { return {
props: { props: {
pollObject, pollObject,
pollId, pollId,
gaiaAddress gaiaAddress,
currentBlockHeight
}, },
}; };
} }

View File

@@ -1,5 +1,6 @@
import { openContractCall, openContractDeploy } from "@stacks/connect"; import { openContractCall, openContractDeploy } from "@stacks/connect";
import { AnchorMode, bufferCV, listCV, stringAsciiCV, uintCV } from "@stacks/transactions"; import { AnchorMode, bufferCV, FungibleConditionCode, listCV, makeStandardSTXPostCondition, stringAsciiCV, uintCV } from "@stacks/transactions";
import { Constants } from "../common/constants";
import { getNetworkType } from "../services/auth"; import { getNetworkType } from "../services/auth";
const cancelCallbackFunction = (data) => { const cancelCallbackFunction = (data) => {
@@ -9,6 +10,15 @@ const cancelCallbackFunction = (data) => {
export async function deployContract(pollObject, contractName, callbackFunction) { export async function deployContract(pollObject, contractName, callbackFunction) {
const contract = getContract(pollObject); const contract = getContract(pollObject);
// Add an optional post condition
// See below for details on constructing post conditions
const postConditionAddress = Constants.STACKS_MAINNET_FLAG ? Constants.MAINNET_DONATION_ADDRESS : Constants.TESTNET_DONATION_ADDRESS;
const postConditionCode = FungibleConditionCode.GreaterEqual;
const postConditionAmount = 5000000n;
const postConditions = [
makeStandardSTXPostCondition(postConditionAddress, postConditionCode, postConditionAmount),
];
// Transaction options // Transaction options
const txOptions = { const txOptions = {
contractName: contractName, contractName: contractName,
@@ -19,6 +29,7 @@ export async function deployContract(pollObject, contractName, callbackFunction)
name: "Ballot", name: "Ballot",
icon: window.location.origin + "/images/logo/ballot.png" icon: window.location.origin + "/images/logo/ballot.png"
}, },
postConditions: postConditions,
onFinish: callbackFunction, onFinish: callbackFunction,
onCancel: cancelCallbackFunction onCancel: cancelCallbackFunction
}; };
@@ -63,10 +74,10 @@ function getContract(pollObject) {
} else { } else {
// Fungible tokens // Fungible tokens
if (pollObject?.votingStrategyTemplate == "stx") { if (pollObject?.votingStrategyTemplate == "stx") {
strategyFunction = getStrategyFunctionForStxHolders(); strategyFunction = getStrategyFunctionForStxHolders(pollObject?.snapshotBlockHeight || 0);
votingPowerVariable = `(voting-power (get-voting-power-by-stx-holdings))`; votingPowerVariable = `(voting-power (get-voting-power-by-stx-holdings))`;
} else if (pollObject?.strategyContractName) { } else if (pollObject?.strategyContractName) {
strategyFunction = getStrategyFunctionForFT(pollObject?.strategyContractName); strategyFunction = getStrategyFunctionForFT(pollObject?.strategyContractName, pollObject?.snapshotBlockHeight || 0);
votingPowerVariable = `(voting-power (get-voting-power-by-ft-holdings))`; votingPowerVariable = `(voting-power (get-voting-power-by-ft-holdings))`;
} }
} }
@@ -337,7 +348,12 @@ function getRawContract() {
(var-set options (list &{optionIds})) (var-set options (list &{optionIds}))
(var-set start u&{startAtBlock}) (var-set start u&{startAtBlock})
(var-set end u&{endAtBlock}) (var-set end u&{endAtBlock})
&{optionResults}`; &{optionResults}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Supporting Ballot.gg
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(stx-transfer? u5000000 tx-sender '${Constants.STACKS_MAINNET_FLAG ? Constants.MAINNET_DONATION_ADDRESS : Constants.TESTNET_DONATION_ADDRESS})`;
} }
function getStrategyFunctionForBtcHolders() { function getStrategyFunctionForBtcHolders() {
@@ -392,7 +408,24 @@ function getStrategyFunctionForNFT(strategyContractName) {
)`; )`;
} }
function getStrategyFunctionForStxHolders() { function getStrategyFunctionForStxHolders(snapshotBlockHeight) {
if (snapshotBlockHeight > 0) {
return `
(define-private (get-voting-power-by-stx-holdings)
(at-block (unwrap-panic (get-block-info? id-header-hash u${snapshotBlockHeight}))
(let
(
(stx-balance (stx-get-balance tx-sender))
)
(if (> stx-balance u0)
(/ stx-balance u1000000)
stx-balance
)
)
)
)`;
}
return ` return `
(define-private (get-voting-power-by-stx-holdings) (define-private (get-voting-power-by-stx-holdings)
(let (let
@@ -407,7 +440,29 @@ function getStrategyFunctionForStxHolders() {
)`; )`;
} }
function getStrategyFunctionForFT(strategyContractName) { function getStrategyFunctionForFT(strategyContractName, snapshotBlockHeight) {
if (snapshotBlockHeight > 0) {
return `
(define-private (get-voting-power-by-ft-holdings)
(at-block (unwrap-panic (get-block-info? id-header-hash u${snapshotBlockHeight}))
(let
(
(ft-balance (unwrap-panic (contract-call? '${strategyContractName} get-balance tx-sender)))
(ft-decimals (unwrap-panic (contract-call? '${strategyContractName} get-decimals)))
)
(if (> ft-balance u0)
(if (> ft-decimals u0)
(/ ft-balance (pow u10 ft-decimals))
ft-balance
)
ft-balance
)
)
)
)`;
}
return ` return `
(define-private (get-voting-power-by-ft-holdings) (define-private (get-voting-power-by-ft-holdings)
(let (let

View File

@@ -187,3 +187,13 @@ export function formatUtcDateTime(dateTimeStr) {
// Construct the formatted string // Construct the formatted string
return `${day} ${month} ${year}, ${hourFormatted}:${minuteFormatted} ${amPm}`; return `${day} ${month} ${year}, ${hourFormatted}:${minuteFormatted} ${amPm}`;
} }
export const calculateDateByBlockHeight = (currentBlockHeight, targetBlockHeight) => {
if (targetBlockHeight && currentBlockHeight && targetBlockHeight > 0 && currentBlockHeight > 0 &&
targetBlockHeight > currentBlockHeight) {
const diff = targetBlockHeight - currentBlockHeight;
const minutes = diff * 10;
return new Date(new Date().getTime() + (minutes * 60 * 1000)).toISOString();
}
}

199
yarn.lock
View File

@@ -151,101 +151,188 @@
"@noble/hashes" "~1.1.1" "@noble/hashes" "~1.1.1"
"@scure/base" "~1.1.0" "@scure/base" "~1.1.0"
"@stacks/auth@^6.1.1", "@stacks/auth@^6.12.0": "@stacks/auth@^6.17.0":
version "6.12.0" version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/auth/-/auth-6.12.0.tgz" resolved "https://registry.npmjs.org/@stacks/auth/-/auth-6.17.0.tgz"
integrity sha512-ViSpeWNw1MJBtvykcPTcn9vTy9v8pK8jiQFjfOkiFQ0q+oEhIDQrtpN5OYtTh5HvoZk8du+43nIoUYUECNahHQ== integrity sha512-SaxB6ULkYLRd5WZotymlPzroBn5/28KgJOTY0nKDcwCqxSkYjPZepweA30LK5eUOmePuGILaMTagj1ibZRnvUg==
dependencies: dependencies:
"@stacks/common" "^6.10.0" "@stacks/common" "^6.16.0"
"@stacks/encryption" "^6.12.0" "@stacks/encryption" "^6.17.0"
"@stacks/network" "^6.11.3" "@stacks/network" "^6.17.0"
"@stacks/profile" "^6.12.0" "@stacks/profile" "^6.17.0"
cross-fetch "^3.1.5" cross-fetch "^3.1.5"
jsontokens "^4.0.1" jsontokens "^4.0.1"
"@stacks/common@^6.10.0": "@stacks/auth@^7.0.0-next.70":
version "6.10.0" version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/common/-/common-6.10.0.tgz" resolved "https://registry.npmjs.org/@stacks/auth/-/auth-7.0.0.tgz"
integrity sha512-6x5Z7AKd9/kj3+DYE9xIDIkFLHihBH614i2wqrZIjN02WxVo063hWSjIlUxlx8P4gl6olVzlOy5LzhLJD9OP0A== integrity sha512-p0/FJy5jRRgtsVzGpWDgNE0fi/ioPCL3S1tZHRsvdKO7moquHWnTlBV/9yVkGbd+V0kD95Sd0euX5pwWA82MhA==
dependencies:
"@noble/secp256k1" "1.7.1"
"@stacks/common" "^7.0.0"
"@stacks/encryption" "^7.0.0"
"@stacks/network" "^7.0.0"
"@stacks/profile" "^7.0.0"
cross-fetch "^3.1.5"
jsontokens "^4.0.1"
"@stacks/common@^6.16.0":
version "6.16.0"
resolved "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz"
integrity sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==
dependencies: dependencies:
"@types/bn.js" "^5.1.0" "@types/bn.js" "^5.1.0"
"@types/node" "^18.0.4" "@types/node" "^18.0.4"
"@stacks/connect-ui@6.4.1": "@stacks/common@^7.0.0", "@stacks/common@^7.0.0-next.70":
version "6.4.1" version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.4.1.tgz" resolved "https://registry.npmjs.org/@stacks/common/-/common-7.0.0.tgz"
integrity sha512-Y6Fp26MUsMQq08zFSWus40rS7RNHrHj6VDJrFUqM9VsksV3wftpsRcy7psQusUvW1DS7fPza67IlM1dcN4rvSg== integrity sha512-/BKBK9S9GEuGjbnc2fBAwsG21f8cfNekG/9mXLSMwBqnh4qaQY2hxK+6wRI2YXJgpkXrpZilpZy2sdPGlVUdQA==
"@stacks/connect-ui@6.5.0":
version "6.5.0"
resolved "https://registry.npmjs.org/@stacks/connect-ui/-/connect-ui-6.5.0.tgz"
integrity sha512-iXSpl2NxrjERBqtGgkZp0tX1uJgdWZXmsNo3I0cJYYTTbieSAE/Al9nTYc1wLTPW5w5oVvZEkQKo90WIrHR8Rw==
dependencies: dependencies:
"@stencil/core" "^2.17.1" "@stencil/core" "^2.17.1"
"@stacks/connect@^7.7.1": "@stacks/connect@^7.8.0":
version "7.7.1" version "7.8.0"
resolved "https://registry.npmjs.org/@stacks/connect/-/connect-7.7.1.tgz" resolved "https://registry.npmjs.org/@stacks/connect/-/connect-7.8.0.tgz"
integrity sha512-MwLRhgRLOGo0Y4IDC0qp9RUX2SZubgse1aI2TN/fz2abNIh1LgmOKUua3w17YiBEZxDD9nyQ4KW1c33bdnrOPw== integrity sha512-whwHygS69XyY/LMvlyp0Whu4mkWkFoJ4Z/Bva9aO1xLLyEVDbKLZnslGWmPs1Io/y76oGEorqVEh0MeLymTIjg==
dependencies: dependencies:
"@stacks/auth" "^6.1.1" "@stacks/auth" "^7.0.0-next.70"
"@stacks/connect-ui" "6.4.1" "@stacks/common" "^7.0.0-next.70"
"@stacks/network" "^6.1.1" "@stacks/connect-ui" "6.5.0"
"@stacks/profile" "^6.1.1" "@stacks/network" "^7.0.0-next.70"
"@stacks/transactions" "^6.1.1" "@stacks/network-v6" "npm:@stacks/network@^6.16.0"
"@stacks/profile" "^7.0.0-next.70"
"@stacks/transactions" "^7.0.0-next.70"
"@stacks/transactions-v6" "npm:@stacks/transactions@^6.16.0"
jsontokens "^4.0.1" jsontokens "^4.0.1"
"@stacks/encryption@^6.12.0": "@stacks/encryption@^6.17.0":
version "6.12.0" version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.12.0.tgz" resolved "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.17.0.tgz"
integrity sha512-CubE51pHrcxx3yA+xapevPgA9UDleIoEaUZ06/9uD91B42yvTg37HyS8t06rzukU9q+X7Cv2I/+vbuf4nJIo8g== integrity sha512-c0+ZOjrAiB1fDCjXO6XqHdYgpeBeMYyeH+dWahpD1VQUDor2PE5Q47qyuibWmx36rLWt1M6wlaLdeVm6HlKGzw==
dependencies: dependencies:
"@noble/hashes" "1.1.5" "@noble/hashes" "1.1.5"
"@noble/secp256k1" "1.7.1" "@noble/secp256k1" "1.7.1"
"@scure/bip39" "1.1.0" "@scure/bip39" "1.1.0"
"@stacks/common" "^6.10.0" "@stacks/common" "^6.16.0"
"@types/node" "^18.0.4" "@types/node" "^18.0.4"
base64-js "^1.5.1" base64-js "^1.5.1"
bs58 "^5.0.0" bs58 "^5.0.0"
ripemd160-min "^0.0.6" ripemd160-min "^0.0.6"
varuint-bitcoin "^1.1.2" varuint-bitcoin "^1.1.2"
"@stacks/network@^6.1.1", "@stacks/network@^6.11.3": "@stacks/encryption@^7.0.0":
version "6.11.3" version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz" resolved "https://registry.npmjs.org/@stacks/encryption/-/encryption-7.0.0.tgz"
integrity sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg== integrity sha512-kQhiurn8s0DV6OALqEy2Aqwp2DNJUD41S1bnD/+UESyEDD5XRqL84MEo7mCL8pTPr+FVdhT+diEIPeAfEtbTPQ==
dependencies: dependencies:
"@stacks/common" "^6.10.0" "@noble/hashes" "1.1.5"
"@noble/secp256k1" "1.7.1"
"@scure/bip39" "1.1.0"
"@stacks/common" "^7.0.0"
base64-js "^1.5.1"
bs58 "^5.0.0"
ripemd160-min "^0.0.6"
varuint-bitcoin "^1.1.2"
"@stacks/network-v6@npm:@stacks/network@^6.16.0":
version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz"
integrity sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==
dependencies:
"@stacks/common" "^6.16.0"
cross-fetch "^3.1.5" cross-fetch "^3.1.5"
"@stacks/profile@^6.1.1", "@stacks/profile@^6.12.0": "@stacks/network@^6.17.0":
version "6.12.0" version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/profile/-/profile-6.12.0.tgz" resolved "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz"
integrity sha512-eY5IpX+GGHIcYLkivDmf3mkxDIgTQ+LhU8UG4jvOqDi+e1DvF9cIi3+reG5KVo0pQzqyT1OS7+16AwVcgp7/og== integrity sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==
dependencies: dependencies:
"@stacks/common" "^6.10.0" "@stacks/common" "^6.16.0"
"@stacks/network" "^6.11.3" cross-fetch "^3.1.5"
"@stacks/transactions" "^6.12.0"
"@stacks/network@^7.0.0", "@stacks/network@^7.0.0-next.70":
version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/network/-/network-7.0.0.tgz"
integrity sha512-4diddT0ii85BQ4PW6ww3l4cS7Oo0a5VIsJ7umBcCPAArIc4Sm/MIOEXIg9joKK8fVHLnWyh1p4D+febJQFfa+Q==
dependencies:
"@stacks/common" "^7.0.0"
cross-fetch "^3.1.5"
"@stacks/profile@^6.17.0":
version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/profile/-/profile-6.17.0.tgz"
integrity sha512-EoYe0NapFc6bgA+vyCVY2sYYRHk3pbsbRnm3eaSp8y9Drfy8dBqsM10W1jjTwOn0R+IMmDT52lojdW7Pw3c7Mw==
dependencies:
"@stacks/common" "^6.16.0"
"@stacks/network" "^6.17.0"
"@stacks/transactions" "^6.17.0"
jsontokens "^4.0.1" jsontokens "^4.0.1"
schema-inspector "^2.0.2" schema-inspector "^2.0.2"
zone-file "^2.0.0-beta.3" zone-file "^2.0.0-beta.3"
"@stacks/storage@^6.12.0": "@stacks/profile@^7.0.0", "@stacks/profile@^7.0.0-next.70":
version "6.12.0" version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/storage/-/storage-6.12.0.tgz" resolved "https://registry.npmjs.org/@stacks/profile/-/profile-7.0.0.tgz"
integrity sha512-RiB8cfWKCm4LrDLXdjtRj4syzvpwmJ/6WKcF+1RHQBTyJerPgxoBn1NoKzjOcydQvVj1jpR/ccaS78xVxlMsTQ== integrity sha512-E9RDodVgcLBs6ZiV88lVQyDjA8ZDVPswbPpLNHeAA+evJ2GwRKMJrNnirjydMI37aWm3ZpYOEMLMbqdi38VR7w==
dependencies: dependencies:
"@stacks/auth" "^6.12.0" "@stacks/common" "^7.0.0"
"@stacks/common" "^6.10.0" "@stacks/network" "^7.0.0"
"@stacks/encryption" "^6.12.0" "@stacks/transactions" "^7.0.0"
"@stacks/network" "^6.11.3" jsontokens "^4.0.1"
schema-inspector "^2.0.2"
zone-file "^2.0.0-beta.3"
"@stacks/storage@^6.17.0":
version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/storage/-/storage-6.17.0.tgz"
integrity sha512-vhgV8C+1UahSWrafOHh/ZnTVYs8JadLsh5OZCVgtxWXV7z8ruQzVN24eeXbR+C7Vme2YpDP210ly7Wyqxd755Q==
dependencies:
"@stacks/auth" "^6.17.0"
"@stacks/common" "^6.16.0"
"@stacks/encryption" "^6.17.0"
"@stacks/network" "^6.17.0"
base64-js "^1.5.1" base64-js "^1.5.1"
jsontokens "^4.0.1" jsontokens "^4.0.1"
"@stacks/transactions@^6.1.1", "@stacks/transactions@^6.12.0": "@stacks/transactions-v6@npm:@stacks/transactions@^6.16.0":
version "6.12.0" version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.12.0.tgz" resolved "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz"
integrity sha512-gRP3SfTaAIoTdjMvOiLrMZb/senqB8JQlT5Y4C3/CiHhiprYwTx7TbOCSa7WsNOU99H4aNfHvatmymuggXQVkA== integrity sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==
dependencies: dependencies:
"@noble/hashes" "1.1.5" "@noble/hashes" "1.1.5"
"@noble/secp256k1" "1.7.1" "@noble/secp256k1" "1.7.1"
"@stacks/common" "^6.10.0" "@stacks/common" "^6.16.0"
"@stacks/network" "^6.11.3" "@stacks/network" "^6.17.0"
c32check "^2.0.0"
lodash.clonedeep "^4.5.0"
"@stacks/transactions@^6.17.0":
version "6.17.0"
resolved "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz"
integrity sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==
dependencies:
"@noble/hashes" "1.1.5"
"@noble/secp256k1" "1.7.1"
"@stacks/common" "^6.16.0"
"@stacks/network" "^6.17.0"
c32check "^2.0.0"
lodash.clonedeep "^4.5.0"
"@stacks/transactions@^7.0.0", "@stacks/transactions@^7.0.0-next.70":
version "7.0.0"
resolved "https://registry.npmjs.org/@stacks/transactions/-/transactions-7.0.0.tgz"
integrity sha512-9kGTnJLwRQPugLzbdJ8MmFED+eRhlJKIXpz2mshyy238hvBc4T0jynsoJMi4qGqvJYzsiRYCLDPJVkkUde85vA==
dependencies:
"@noble/hashes" "1.1.5"
"@noble/secp256k1" "1.7.1"
"@stacks/common" "^7.0.0"
"@stacks/network" "^7.0.0"
c32check "^2.0.0" c32check "^2.0.0"
lodash.clonedeep "^4.5.0" lodash.clonedeep "^4.5.0"