Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/TUTORIAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -866,15 +866,15 @@ entry verify(sig s, pubkey pk) {
}
```

**`checkSigFromStack(datasig signature, byte[32] digest, pubkey publicKey): bool`**
**`checkMsgSig(datasig signature, byte[32] digest, pubkey publicKey): bool`**

Verify a 64-byte Schnorr signature against a 32-byte digest supplied by the
contract. Hash the message explicitly with the hash function required by your
protocol:

```javascript
entry verify(datasig oracleSig, byte[] oracleMessage, pubkey oraclePk) {
require(checkSigFromStack(oracleSig, sha256(oracleMessage), oraclePk));
require(checkMsgSig(oracleSig, sha256(oracleMessage), oraclePk));
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
(function_call
(identifier) @function.builtin
(#match? @function.builtin
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkSigFromStack|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkMsgSig|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))

(call_statement
(member_access
Expand Down
2 changes: 1 addition & 1 deletion extensions/vscode/queries/highlights.scm
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
(function_call
(identifier) @function.builtin
(#match? @function.builtin
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkSigFromStack|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkMsgSig|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))

(call_statement
(member_access
Expand Down
2 changes: 1 addition & 1 deletion extensions/zed/languages/silverscript/highlights.scm
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
(function_call
(identifier) @function.builtin
(#match? @function.builtin
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkSigFromStack|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkMsgSig|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))

(call_statement
(member_access
Expand Down
4 changes: 2 additions & 2 deletions silverscript-lang/src/compiler/builtin_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ pub(super) fn builtin_return(name: &str) -> Option<BuiltinReturn> {
| "OpCovOutputCount"
| "OpCovOutputIdx" => scalar(TypeBase::Int),
"length" => scalar(TypeBase::Int),
"OpTxInputIsCoinbase" | "checkSig" | "checkSigFromStack" | "checkSigFromStackECDSA" => scalar(TypeBase::Bool),
"OpTxInputIsCoinbase" | "checkSig" | "checkMsgSig" | "checkSigFromStackECDSA" => scalar(TypeBase::Bool),
"r0.g16.verify"
| "r0.succinct.verify"
| "r0.succinct.blake2b.verify"
Expand Down Expand Up @@ -123,7 +123,7 @@ pub(super) fn builtin_parameters(name: &str) -> Option<Vec<(&'static str, TypeRe
"blake3WithKey" => vec![("data", byte_array(ArrayDim::Dynamic)), ("key", byte_array(ArrayDim::Fixed(32)))],
"templateHash" => vec![("templatePrefix", byte_array(ArrayDim::Dynamic)), ("templateSuffix", byte_array(ArrayDim::Dynamic))],
"checkSig" => vec![("signature", scalar(TypeBase::Sig)), ("publicKey", scalar(TypeBase::Pubkey))],
"checkSigFromStack" => vec![
"checkMsgSig" => vec![
("signature", scalar(TypeBase::Datasig)),
("digest", byte_array(ArrayDim::Fixed(32))),
("publicKey", scalar(TypeBase::Pubkey)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ pub(super) fn compile_call_expr<'i>(
"blake3WithKey" => compile_blake3_with_key_call(ctx, args),
"templateHash" => compile_template_hash_call(ctx, args),
"checkSig" => compile_checksig_call(ctx, args),
"checkSigFromStack" => compile_checksigfromstack_call(ctx, name, args, OpCheckSigFromStack),
"checkMsgSig" => compile_checksigfromstack_call(ctx, name, args, OpCheckSigFromStack),
"checkSigFromStackECDSA" => compile_checksigfromstack_call(ctx, name, args, OpCheckSigFromStackECDSA),
"r0.g16.verify" => compile_r0_groth16_verify_call(ctx, args),
"r0.succinct.verify" | "r0.succinct.blake2b.verify" | "r0.succinct.poseidon2.verify" | "r0.succinct.sha256.verify" => {
Expand Down
26 changes: 13 additions & 13 deletions silverscript-lang/tests/compiler_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8518,7 +8518,7 @@ fn checksigfromstack_lowers_to_matching_opcode() {
let source = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
entry main() {
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand Down Expand Up @@ -8590,7 +8590,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
let raw_message = r#"
contract DataSig(datasig signature, byte[] message, pubkey publicKey) {
entry main() {
require(checkSigFromStack(signature, message, publicKey));
require(checkMsgSig(signature, message, publicKey));
}
}
"#;
Expand All @@ -8607,7 +8607,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
entry main() {
int N = 32;
byte[N] digest = byte[N](0x010203);
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand All @@ -8624,7 +8624,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
int constant N = 32;

entry main(byte[N] digest) {
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand All @@ -8639,7 +8639,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
r#"
contract DataSig() {{
entry main() {{
require(checkSigFromStack({signature_literal}, {digest_literal}, {public_key_literal}));
require(checkMsgSig({signature_literal}, {digest_literal}, {public_key_literal}));
}}
}}
"#
Expand All @@ -8652,7 +8652,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
entry main() {{
byte[32] digest = {digest_literal};
byte[32] publicKey = {public_key_bytes_literal};
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}}
}}
"#
Expand All @@ -8667,7 +8667,7 @@ fn checksigfromstack_requires_datasig_and_32_byte_digest_types() {
let tx_signature = r#"
contract DataSig(sig signature, byte[32] digest, pubkey publicKey) {
entry main() {
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand Down Expand Up @@ -9091,7 +9091,7 @@ fn checksigfromstack_result_is_checked_as_bool() {
let bool_assignment = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
entry main() {
bool ok = checkSigFromStack(signature, digest, publicKey);
bool ok = checkMsgSig(signature, digest, publicKey);
require(ok);
}
}
Expand All @@ -9106,7 +9106,7 @@ fn checksigfromstack_result_is_checked_as_bool() {
let byte_assignment = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
entry main() {
byte[32] ok = checkSigFromStack(signature, digest, publicKey);
byte[32] ok = checkMsgSig(signature, digest, publicKey);
require(true);
}
}
Expand All @@ -9122,7 +9122,7 @@ fn checksigfromstack_result_is_checked_as_bool() {
let bool_return = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
function ok() : bool {
return checkSigFromStack(signature, digest, publicKey);
return checkMsgSig(signature, digest, publicKey);
}

entry main() {
Expand All @@ -9140,7 +9140,7 @@ fn checksigfromstack_result_is_checked_as_bool() {
let byte_return = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
function bad() : byte[32] {
return checkSigFromStack(signature, digest, publicKey);
return checkMsgSig(signature, digest, publicKey);
}

entry main() {
Expand All @@ -9162,7 +9162,7 @@ fn checksigfromstack_executes_schnorr_signature_verification() {
let source = r#"
contract DataSig(datasig signature, byte[32] digest, pubkey publicKey) {
entry main() {
require(checkSigFromStack(signature, digest, publicKey));
require(checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand Down Expand Up @@ -9194,7 +9194,7 @@ fn checksigfromstack_false_result_can_be_asserted() {
let source = r#"
contract DataSig() {
entry main(datasig signature, byte[32] digest, pubkey publicKey) {
require(!checkSigFromStack(signature, digest, publicKey));
require(!checkMsgSig(signature, digest, publicKey));
}
}
"#;
Expand Down
2 changes: 1 addition & 1 deletion silverscript-lang/tests/examples/hodl_vault.sil
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ contract HodlVault(
require(tx.time >= blockHeight);
require(price >= priceTarget);

require(checkSigFromStack(oracleSig, sha256(oracleMessage), oraclePk));
require(checkMsgSig(oracleSig, sha256(oracleMessage), oraclePk));
require(checkSig(ownerSig, ownerPk));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ pragma silverscript ^0.1.0;

contract Test(datasig s, pubkey pk) {
entry cds(byte[] data) {
require(checkSigFromStack(s, sha256(data), pk));
require(checkMsgSig(s, sha256(data), pk));
}
}
2 changes: 1 addition & 1 deletion silverscript-lang/tests/examples/trailing_comma.sil
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ contract Contract(
sig oracleTxSig,
) {
byte[] oracleMessage = byte[]('Spend') + (12 as byte[8]);
require(checkSigFromStack(
require(checkMsgSig(
oracleMsgSig,
sha256(oracleMessage),
oraclePk,
Expand Down
2 changes: 1 addition & 1 deletion tree-sitter/queries/highlights.scm
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
(function_call
(identifier) @function.builtin
(#match? @function.builtin
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkSigFromStack|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))
"^(readInputState|readInputStateWithTemplate|validateOutputState|validateOutputStateWithTemplate|validateOutputStateWithInputTemplate|verifyOutputState|verifyOutputStates|sha256|OpTxSubnetId|OpTxGas|OpTxPayloadLen|OpTxPayloadSubstr|OpOutpointTxId|OpOutpointIndex|OpTxInputScriptSigLen|OpTxInputScriptSigSubstr|OpTxInputSeq|OpTxInputIsCoinbase|OpTxInputSpkLen|OpTxInputSpkSubstr|OpTxOutputSpkLen|OpTxOutputSpkSubstr|OpAuthOutputCount|OpAuthOutputIdx|OpInputCovenantId|OpOutputCovenantId|OpCovInputCount|OpCovInputIdx|OpCovOutputCount|OpCovOutputIdx|OpNum2Bin|OpBin2Num|OpChainblockSeqCommit|checkMsgSig|checkSigFromStackECDSA|checkSig|checkMultiSig|blake2b|blake2bWithKey|blake3|blake3WithKey|templateHash)$"))

(call_statement
(member_access
Expand Down