SHA256
Переписать shine_payments и обновить тестовый UI с известным багом state
This commit is contained in:
@@ -65,6 +65,7 @@
|
||||
<label>Кошелек менеджера: <input id="managerWallet" placeholder="Base58" /></label>
|
||||
<label>Добавить лимит Q1 (USD): <input id="addQ1" value="100" /></label>
|
||||
<label>Добавить лимит Q2 (USD): <input id="addQ2" value="50" /></label>
|
||||
<label>Добавить лимит Q3 (USD): <input id="addQ3" value="25" /></label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button id="grantBtn">Выдать лимиты</button>
|
||||
@@ -87,9 +88,10 @@
|
||||
const RPC_URL = "https://api.devnet.solana.com";
|
||||
const connection = new solanaWeb3.Connection(RPC_URL, "confirmed");
|
||||
const SEEDS = {
|
||||
config: "shine_payments_v3_config",
|
||||
managerAllowance: "shine_p_v3_manager_allow",
|
||||
config: "shine_payments_config",
|
||||
managerAllowance: "shine_p_manager_allow",
|
||||
};
|
||||
const IX = { grantManagerLimits: 3 };
|
||||
let walletPubkey = null;
|
||||
let configCache = null;
|
||||
document.getElementById("programId").textContent = PROGRAM_ID.toBase58();
|
||||
@@ -124,10 +126,8 @@
|
||||
if (!Number.isFinite(v) || v < 0) throw new Error("Некорректная сумма USD");
|
||||
return BigInt(Math.round(v * 100));
|
||||
}
|
||||
async function ixDiscriminator(name) {
|
||||
const msg = utf8("global:" + name);
|
||||
const hash = await crypto.subtle.digest("SHA-256", msg);
|
||||
return new Uint8Array(hash).slice(0, 8);
|
||||
function ixData(tag, ...parts) {
|
||||
return concat(new Uint8Array([tag]), ...parts);
|
||||
}
|
||||
function isUnauthorizedDao(msg) {
|
||||
const s = String(msg || "").toLowerCase();
|
||||
@@ -147,7 +147,8 @@
|
||||
const manager = new solanaWeb3.PublicKey(data.slice(o, o + 32)); o += 32;
|
||||
const q1 = readU64(data, o); o += 8;
|
||||
const q2 = readU64(data, o); o += 8;
|
||||
return { version, manager, q1, q2 };
|
||||
const q3 = readU64(data, o); o += 8;
|
||||
return { version, manager, q1, q2, q3 };
|
||||
}
|
||||
|
||||
function getProvider() {
|
||||
@@ -216,11 +217,11 @@
|
||||
const manager = new solanaWeb3.PublicKey(document.getElementById("managerWallet").value.trim());
|
||||
const addQ1 = usdToCents(document.getElementById("addQ1").value.trim());
|
||||
const addQ2 = usdToCents(document.getElementById("addQ2").value.trim());
|
||||
if (addQ1 === 0n && addQ2 === 0n) throw new Error("Нужно указать сумму хотя бы для одной очереди.");
|
||||
const addQ3 = usdToCents(document.getElementById("addQ3").value.trim());
|
||||
if (addQ1 === 0n && addQ2 === 0n && addQ3 === 0n) throw new Error("Нужно указать сумму хотя бы для одной очереди.");
|
||||
|
||||
const allowancePda = deriveManagerAllowancePda(manager);
|
||||
const disc = await ixDiscriminator("grant_manager_limits");
|
||||
const data = concat(disc, manager.toBytes(), u64ToBytes(addQ1), u64ToBytes(addQ2));
|
||||
const data = ixData(IX.grantManagerLimits, manager.toBytes(), u64ToBytes(addQ1), u64ToBytes(addQ2), u64ToBytes(addQ3));
|
||||
const keys = [
|
||||
{ pubkey: walletPubkey, isSigner: true, isWritable: true },
|
||||
{ pubkey: configPda, isSigner: false, isWritable: true },
|
||||
@@ -258,6 +259,7 @@
|
||||
<div>PDA: <code>${allowancePda.toBase58()}</code></div>
|
||||
<div>Доступно Q1: <b>${centsToUsdStr(st.q1)} USD</b></div>
|
||||
<div>Доступно Q2: <b>${centsToUsdStr(st.q2)} USD</b></div>
|
||||
<div>Доступно Q3: <b>${centsToUsdStr(st.q3)} USD</b></div>
|
||||
`;
|
||||
} catch (e) {
|
||||
out.innerHTML = `<span class="err">${String(e.message || e)}</span>`;
|
||||
|
||||
Reference in New Issue
Block a user