feat: handler withdraw purpose
This commit is contained in:
parent
be7c0c8012
commit
5b61a75088
|
@ -1,5 +1,8 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
builtins::{self, g1_element, g2_element},
|
builtins::{
|
||||||
|
self, g1_element, g2_element, SCRIPT_CONTEXT, SCRIPT_PURPOSE, SCRIPT_PURPOSE_MINT,
|
||||||
|
SCRIPT_PURPOSE_SPEND, SCRIPT_PURPOSE_WITHDRAW,
|
||||||
|
},
|
||||||
expr::{TypedExpr, UntypedExpr},
|
expr::{TypedExpr, UntypedExpr},
|
||||||
line_numbers::LineNumbers,
|
line_numbers::LineNumbers,
|
||||||
parser::token::{Base, Token},
|
parser::token::{Base, Token},
|
||||||
|
@ -429,14 +432,21 @@ impl TypedDataType {
|
||||||
constructors: vec![
|
constructors: vec![
|
||||||
RecordConstructor {
|
RecordConstructor {
|
||||||
location: Span::empty(),
|
location: Span::empty(),
|
||||||
name: "__Mint".to_string(),
|
name: SCRIPT_PURPOSE_MINT.to_string(),
|
||||||
arguments: vec![],
|
arguments: vec![],
|
||||||
doc: None,
|
doc: None,
|
||||||
sugar: false,
|
sugar: false,
|
||||||
},
|
},
|
||||||
RecordConstructor {
|
RecordConstructor {
|
||||||
location: Span::empty(),
|
location: Span::empty(),
|
||||||
name: "__Spend".to_string(),
|
name: SCRIPT_PURPOSE_SPEND.to_string(),
|
||||||
|
arguments: vec![],
|
||||||
|
doc: None,
|
||||||
|
sugar: false,
|
||||||
|
},
|
||||||
|
RecordConstructor {
|
||||||
|
location: Span::empty(),
|
||||||
|
name: SCRIPT_PURPOSE_WITHDRAW.to_string(),
|
||||||
arguments: vec![],
|
arguments: vec![],
|
||||||
doc: None,
|
doc: None,
|
||||||
sugar: false,
|
sugar: false,
|
||||||
|
@ -444,7 +454,7 @@ impl TypedDataType {
|
||||||
],
|
],
|
||||||
doc: None,
|
doc: None,
|
||||||
location: Span::empty(),
|
location: Span::empty(),
|
||||||
name: "__ScriptPurpose".to_string(),
|
name: SCRIPT_PURPOSE.to_string(),
|
||||||
opaque: false,
|
opaque: false,
|
||||||
parameters: vec![],
|
parameters: vec![],
|
||||||
public: true,
|
public: true,
|
||||||
|
@ -456,14 +466,14 @@ impl TypedDataType {
|
||||||
DataType {
|
DataType {
|
||||||
constructors: vec![RecordConstructor {
|
constructors: vec![RecordConstructor {
|
||||||
location: Span::empty(),
|
location: Span::empty(),
|
||||||
name: "__ScriptContext".to_string(),
|
name: SCRIPT_CONTEXT.to_string(),
|
||||||
arguments: vec![],
|
arguments: vec![],
|
||||||
doc: None,
|
doc: None,
|
||||||
sugar: false,
|
sugar: false,
|
||||||
}],
|
}],
|
||||||
doc: None,
|
doc: None,
|
||||||
location: Span::empty(),
|
location: Span::empty(),
|
||||||
name: "__ScriptContext".to_string(),
|
name: SCRIPT_CONTEXT.to_string(),
|
||||||
opaque: false,
|
opaque: false,
|
||||||
parameters: vec![],
|
parameters: vec![],
|
||||||
public: true,
|
public: true,
|
||||||
|
|
|
@ -40,6 +40,10 @@ pub const FUZZER: &str = "Fuzzer";
|
||||||
pub const SCRIPT_PURPOSE: &str = "__ScriptPurpose";
|
pub const SCRIPT_PURPOSE: &str = "__ScriptPurpose";
|
||||||
pub const SCRIPT_PURPOSE_SPEND: &str = "__Spend";
|
pub const SCRIPT_PURPOSE_SPEND: &str = "__Spend";
|
||||||
pub const SCRIPT_PURPOSE_MINT: &str = "__Mint";
|
pub const SCRIPT_PURPOSE_MINT: &str = "__Mint";
|
||||||
|
pub const SCRIPT_PURPOSE_WITHDRAW: &str = "__Withdraw";
|
||||||
|
pub const SCRIPT_PURPOSE_PUBLISH: &str = "__Publish";
|
||||||
|
pub const SCRIPT_PURPOSE_VOTE: &str = "__Vote";
|
||||||
|
pub const SCRIPT_PURPOSE_PROPOSE: &str = "__Propose";
|
||||||
pub const SCRIPT_PURPOSES_COUNT: u16 = 6;
|
pub const SCRIPT_PURPOSES_COUNT: u16 = 6;
|
||||||
|
|
||||||
pub const SCRIPT_CONTEXT: &str = "__ScriptContext";
|
pub const SCRIPT_CONTEXT: &str = "__ScriptContext";
|
||||||
|
|
|
@ -19,7 +19,7 @@ use crate::{
|
||||||
},
|
},
|
||||||
builtins::{
|
builtins::{
|
||||||
bool, byte_array, data, function, int, list, option, pair, script_context, script_purpose,
|
bool, byte_array, data, function, int, list, option, pair, script_context, script_purpose,
|
||||||
void, PRELUDE, SCRIPT_PURPOSE_MINT, SCRIPT_PURPOSE_SPEND,
|
void, PRELUDE, SCRIPT_PURPOSE_MINT, SCRIPT_PURPOSE_SPEND, SCRIPT_PURPOSE_WITHDRAW,
|
||||||
},
|
},
|
||||||
expr::TypedExpr,
|
expr::TypedExpr,
|
||||||
gen_uplc::{
|
gen_uplc::{
|
||||||
|
@ -293,6 +293,27 @@ impl<'a> CodeGenerator<'a> {
|
||||||
tipo: function(vec![byte_array()], script_purpose()),
|
tipo: function(vec![byte_array()], script_purpose()),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"withdraw" => TypedPattern::Constructor {
|
||||||
|
is_record: false,
|
||||||
|
location: Span::empty(),
|
||||||
|
name: SCRIPT_PURPOSE_WITHDRAW.to_string(),
|
||||||
|
arguments: vec![CallArg {
|
||||||
|
label: None,
|
||||||
|
location: Span::empty(),
|
||||||
|
value: TypedPattern::Var {
|
||||||
|
name: "__purpose_arg__".to_string(),
|
||||||
|
location: Span::empty(),
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
module: None,
|
||||||
|
constructor: PatternConstructor::Record {
|
||||||
|
name: SCRIPT_PURPOSE_WITHDRAW.to_string(),
|
||||||
|
field_map: None,
|
||||||
|
},
|
||||||
|
spread_location: None,
|
||||||
|
tipo: function(vec![data()], script_purpose()),
|
||||||
|
},
|
||||||
|
|
||||||
purpose => {
|
purpose => {
|
||||||
unreachable!("unexpected/unknown purpose: {:?}", purpose)
|
unreachable!("unexpected/unknown purpose: {:?}", purpose)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue