Skip to content

An NFT collection to commemorate players of the Curta team for their participation and performance in the 2023 Paradigm CTF.

License

Notifications You must be signed in to change notification settings

fiveoutofnine/curta-paradigm-2023

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Curta ^ Paradigm CTF 2023 Player NFTs

An NFT collection to commemorate players of the Curta team for their participation and performance in the 2023 Paradigm CTF.

In addition to displaying the team's results, the metadata of each token contains a 100% onchain-generated 1:38 minute long audio arrangement of "In the Hall of the Mountain King" by Edvard Grieg with 3 layered melody lines and a bass line at 117.1875 BPM.

curta-paradigm-2023-start.mp4

Onchain audio generation

Bytebeat generation

Definition [Source] Bytebeat music (or one-liner music) was invented in September 2011. They're generally a piece of rhythmic and somewhat melodic music with no score, no instruments, and no real oscillators. It's simply a single-line formula that defines a waveform as a function of time, processed (usually) 8000 times per second, resulting in an audible waveform with a 256-step resolution from silence (0) to full amplitude (256). If you put that formula into a program with a loop that increments time variable (t), you can generate the headerless unsigned 8 bit mono 8kHz audio stream on output, like in this application. Since these directly output a waveform, they have great performance in compiled languages and can often be ran on even the weakest embedded devices.

The following is a JavaScript bytebeat format implementation for the audio in this project (1:38 minute long audio arrangement of "In the Hall of the Mountain King" by Edvard Grieg with 3 layered melody lines and a bass line at 117.1875 BPM):

c='charCodeAt',u=(t>>18)%3,r=(t)=>t&256?t&255:256-(t&255),a=30*t*2**(("%'(*,(,,+'++*&**%'(*,(,1/,(,////"[c](t>>11&31)+[0,12,7,19][t>>16&3])/12-6),x=30*t*2**(("%,%,%,%,%,%,(/(/,3,3(0,3"[c](8*(t>>17&1?2:t>>15&1)+(t>>12&7)))/12-7),y=a*2,z=y*2,r(a)/(5-(u>1))+(u>0)/5*r(y)+(u>1)*(r(z)/5+r(x)/4)

Visualizer

The audio file for this project has a sample rate of 8000Hz, and each loop is $3\cdot2^{18}$ samples long, so to generate the audio file, compute the value returned by the expression for $\texttt{t}\in[0, 3\cdot2^{18}-1]$ (you can query any range, but this is what's outputted by this project). Then, concatenate the results and prefix it with a WAVE file header.

For practicality, the metadata returned by tokenURI accomplishes this with JavaScript, but the same result can be yielded directly from the smart contract via getSoundValueAt(uint256 _tick) and getAudioFileWavHeader().

Deployment

CurtaPCTF2023 was deployed on Ethereum at 0x6F2Df6c95D80e359a25b6a549037F3B70879B343 compiled with 1_000_000 optimization runs and solc version 0.8.21+commit.d9974bed through the ImmutableCreate2Factory at 0x0000000000FFe8B47B3e2130213B802212439497 with the salt

0x0000000000000000000000000000000000000000000000000000000000000000

and the bytecode

0x60806040523480156200001157600080fd5b50604051620046ae380380620046ae8339810160408190526200003491620000e9565b80604051806060016040528060258152602001620046896025913960408051808201909152601081526f504354467b43555237345f323032337d60801b60208201526000620000848382620001c0565b506001620000938282620001c0565b5050600680546001600160a01b0319166001600160a01b0384169081179091556040519091506000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350506200028c565b600060208284031215620000fc57600080fd5b81516001600160a01b03811681146200011457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014657607f821691505b6020821081036200016757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bb57600081815260208120601f850160051c81016020861015620001965750805b601f850160051c820191505b81811015620001b757828155600101620001a2565b5050505b505050565b81516001600160401b03811115620001dc57620001dc6200011b565b620001f481620001ed845462000131565b846200016d565b602080601f8311600181146200022c5760008415620002135750858301515b600019600386901b1c1916600185901b178555620001b7565b600085815260208120601f198616915b828110156200025d578886015182559484019460019091019084016200023c565b50858210156200027c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6143ed806200029c6000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80636c0360eb116100d8578063b88d4fde1161008c578063e8a3d48511610066578063e8a3d48514610334578063e985e9c51461033c578063f2fde38b1461036a57600080fd5b8063b88d4fde14610306578063bd59342414610319578063c87b56dd1461032157600080fd5b80638da5cb5b116100bd5780638da5cb5b146102cb57806395d89b41146102eb578063a22cb465146102f357600080fd5b80636c0360eb146102a257806370a08231146102aa57600080fd5b806323b872dd1161012f57806342842e0e1161011457806342842e0e1461026957806355f804b31461027c5780636352211e1461028f57600080fd5b806323b872dd14610231578063333a70041461024457600080fd5b8063081812fc11610160578063081812fc146101b9578063095ea7b3146102145780631249c58b1461022957600080fd5b806301ffc9a71461017c57806306fdde03146101a4575b600080fd5b61018f61018a366004612752565b61037d565b60405190151581526020015b60405180910390f35b6101ac610462565b60405161019b91906127dd565b6101ef6101c73660046127f0565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161019b565b61022761022236600461282d565b6104f0565b005b61022761063f565b61022761023f366004612857565b610659565b6102576102523660046127f0565b610920565b60405160ff909116815260200161019b565b610227610277366004612857565b61092b565b61022761028a3660046128dc565b610a95565b6101ef61029d3660046127f0565b610b61565b6101ac610bf2565b6102bd6102b836600461291e565b610bff565b60405190815260200161019b565b6006546101ef9073ffffffffffffffffffffffffffffffffffffffff1681565b6101ac610ca7565b610227610301366004612939565b610cb4565b610227610314366004612975565b610d4b565b6101ac610ea5565b6101ac61032f3660046127f0565b610eb4565b6101ac610f5f565b61018f61034a3660046129e4565b600560209081526000928352604080842090915290825290205460ff1681565b61022761037836600461291e565b610fc8565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061041057507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061045c57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000805461046f90612a17565b80601f016020809104026020016040519081016040528092919081815260200182805461049b90612a17565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b505050505081565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811480610553575073ffffffffffffffffffffffffffffffffffffffff8116600090815260056020908152604080832033845290915290205460ff165b6105be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526004602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061064a336110ba565b90506106563382611487565b50565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116146106e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f57524f4e475f46524f4d0000000000000000000000000000000000000000000060448201526064016105b5565b73ffffffffffffffffffffffffffffffffffffffff8216610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016105b5565b3373ffffffffffffffffffffffffffffffffffffffff841614806107ba575073ffffffffffffffffffffffffffffffffffffffff8316600090815260056020908152604080832033845290915290205460ff165b806107e8575060008181526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1633145b61084e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016105b5565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260036020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055938616808352848320805460010190558583526002825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061045c82611620565b610936838383610659565b73ffffffffffffffffffffffffffffffffffffffff82163b1580610a2a57506040517f150b7a020000000000000000000000000000000000000000000000000000000080825233600483015273ffffffffffffffffffffffffffffffffffffffff858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a069190612a6a565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016105b5565b505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016105b5565b6007610b23828483612b04565b507f23c8c9488efebfd474e85a7956de6f39b17c7ab88502d42a623db2d8e382bbaa8282604051610b55929190612c67565b60405180910390a15050565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610bed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f4d494e5445440000000000000000000000000000000000000000000060448201526064016105b5565b919050565b6007805461046f90612a17565b600073ffffffffffffffffffffffffffffffffffffffff8216610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f41444452455353000000000000000000000000000000000000000060448201526064016105b5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6001805461046f90612a17565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610d56858585610659565b73ffffffffffffffffffffffffffffffffffffffff84163b1580610e3857506040517f150b7a02000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff86169063150b7a0290610dd19033908a90899089908990600401612c83565b6020604051808303816000875af1158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190612a6a565b7fffffffff0000000000000000000000000000000000000000000000000000000016145b610e9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e534146455f524543495049454e540000000000000000000000000000000060448201526064016105b5565b5050505050565b6060610eaf6117f4565b905090565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16610f12576040517f1589363800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078054610f1f90612a17565b159050610f56576007610f3183611814565b604051602001610f42929190612cea565b60405160208183030381529060405261045c565b61045c82611876565b6060610fa4604051806101a0016040528061017f8152602001613baf61017f9139604051602001610f909190612d8f565b6040516020818303038152906040526118fc565b604051602001610fb49190612e21565b604051602081830303815290604052905090565b60065473ffffffffffffffffffffffffffffffffffffffff163314611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016105b5565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b60007fffffffffffffffffffffffff9aa508d1eaff147572e36f7a951c470eb7587b8f73ffffffffffffffffffffffffffffffffffffffff83160161110157506000919050565b7fffffffffffffffffffffffff2bfa81f7462b7b28f3a68887b03e0927d2ba009973ffffffffffffffffffffffffffffffffffffffff83160161114657506001919050565b7fffffffffffffffffffffffffd21eb24da924da6801c37112b910a4df45c6f7dd73ffffffffffffffffffffffffffffffffffffffff83160161118b57506002919050565b7fffffffffffffffffffffffffeb7963940bf4438c1ba7de083d70286deae4c06673ffffffffffffffffffffffffffffffffffffffff8316016111d057506003919050565b7fffffffffffffffffffffffff917daab283b694533372f434efb5af488d2dd5e173ffffffffffffffffffffffffffffffffffffffff83160161121557506004919050565b7ffffffffffffffffffffffffff03c9c4ad1b6f8b5c6a4f8a597eb3470c817074273ffffffffffffffffffffffffffffffffffffffff83160161125a57506005919050565b7fffffffffffffffffffffffff2fb228b2f56fa17a8d8753c5742505232740717973ffffffffffffffffffffffffffffffffffffffff83160161129f57506006919050565b7fffffffffffffffffffffffff869ca4c79464299c9328fe7863cd1922e7e37ac173ffffffffffffffffffffffffffffffffffffffff8316016112e457506007919050565b7fffffffffffffffffffffffff688ca39f3a1c3d8774811a8fcf988a1978f6a2e773ffffffffffffffffffffffffffffffffffffffff83160161132957506008919050565b7fffffffffffffffffffffffffd7932d00852ecc845587c3cbaf7f1a506445f49273ffffffffffffffffffffffffffffffffffffffff83160161136e57506009919050565b7fffffffffffffffffffffffff862ce4035a02585b0ea4c989c2d1bb36627ee59473ffffffffffffffffffffffffffffffffffffffff8316016113b35750600a919050565b7fffffffffffffffffffffffff42014abc60a25134875e8007b99ba5742440a8db73ffffffffffffffffffffffffffffffffffffffff8316016113f85750600b919050565b7fffffffffffffffffffffffffdcf2ce1137a0bf9c5bfa4f06a421af63f2f574a373ffffffffffffffffffffffffffffffffffffffff83160161143d5750600c919050565b6040517f0fccfad700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105b5565b73ffffffffffffffffffffffffffffffffffffffff8216611504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f494e56414c49445f524543495049454e5400000000000000000000000000000060448201526064016105b5565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f4d494e54454400000000000000000000000000000000000060448201526064016105b5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000806116ac6753444835ec580000600c61167760ff6313070c006018600d8a901c161c8116907f2f2f2f2f2c282c2f312c282c2a2827252a2a262a2b2b272b2c2c282c2a28272560f860088b901c161c16612e95565b61168990670de0b6b3a7640000612ea8565b6116939190612f23565b61169d9190612f8b565b671bc16d674ec8000090611acf565b6116b784601e612fb2565b6116c19190612ea8565b90506000611735676124fee993bc0000600c600787821c166003600160118a901c8116146116f657600f89901c6001166116f9565b60025b61170492911b612e95565b77332c3028332c332c2f282f282c252c252c252c252c252c25901c60ff16670de0b6b3a76400006116899190612ea8565b61174085601e612fb2565b61174a9190612ea8565b90506000611759836002612ea8565b90506000611768826002612ea8565b9050600061177585611b07565b9050600061178285611b07565b9050600061178f85611b07565b9050600061179c85611b07565b905060006117af600360128d901c612fc9565b9050600060ff601486600185116005020285600186116004020201866000861160040202896001871160040102010104169050809a5050505050505050505050919050565b60606040518060600160405280602d8152602001613b82602d9139905090565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a90048061182f5750508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b6060600061188383611b33565b90506118d581604051806101a0016040528061017f8152602001613baf61017f91396118c16118b187611eb7565b604051602001610f909190612fdd565b84604051602001610f909493929190612ff9565b6040516020016118e59190612e21565b604051602081830303815290604052915050919050565b6060815160000361191b57505060408051602081019091526000815290565b6000604051806060016040528060408152602001613d2e6040913990506000600260038551600261194c9190612e95565b61195691906131a8565b901b90506000611967826020612e95565b67ffffffffffffffff81111561197f5761197f612a87565b6040519080825280601f01601f1916602001820160405280156119a9576020820181803683370190505b509050818152600183018586518101602084015b81831015611a175760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016119bd565b600389510660018114611a315760028114611a7b57611ac1565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830152611ac1565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b6000611b00670de0b6b3a764000083611ae7866122a4565b611af19190612ea8565b611afb9190612f23565b612507565b9392505050565b6000670de0b6b3a764000082046101008116611b2a578060ff1661010003611b00565b60ff1692915050565b606081600003611b7657505060408051808201909152600981527f7375646f6c6162656c0000000000000000000000000000000000000000000000602082015290565b81600103611bb757505060408051808201909152600681527f4b616c7a616b0000000000000000000000000000000000000000000000000000602082015290565b81600203611bf857505060408051808201909152600481527f7365656e00000000000000000000000000000000000000000000000000000000602082015290565b81600303611c3957505060408051808201909152600881527f69676f726c696e65000000000000000000000000000000000000000000000000602082015290565b81600403611c7a57505060408051808201909152600481527f706f676f00000000000000000000000000000000000000000000000000000000602082015290565b81600503611cbb57505060408051808201909152600781527f706f70756c617200000000000000000000000000000000000000000000000000602082015290565b81600603611cfc57505060408051808201909152600a81527f6f72656e796f6d746f7600000000000000000000000000000000000000000000602082015290565b81600703611d3d57505060408051808201909152600581527f3078373936000000000000000000000000000000000000000000000000000000602082015290565b81600803611d7e57505060408051808201909152600781527f706c6f7463687900000000000000000000000000000000000000000000000000602082015290565b81600903611dbf57505060408051808201909152600781527f666f726167657200000000000000000000000000000000000000000000000000602082015290565b81600a03611e0057505060408051808201909152600a81527f686f727365666163747300000000000000000000000000000000000000000000602082015290565b81600b03611e4157505060408051808201909152600981527f6461746164616e6e650000000000000000000000000000000000000000000000602082015290565b81600c03611e8257505060408051808201909152600681527f62726f636b650000000000000000000000000000000000000000000000000000602082015290565b6040517f7e082e57000000000000000000000000000000000000000000000000000000008152600481018390526024016105b5565b606080604051806104800160405280610448815260200161373a6104489139611f186040518060400160405280600981526020017f7375646f6c6162656c0000000000000000000000000000000000000000000000815250856000146126ef565b611f5a6040518060400160405280600681526020017f4b616c7a616b0000000000000000000000000000000000000000000000000000815250866001146126ef565b611f9c6040518060400160405280600481526020017f7365656e00000000000000000000000000000000000000000000000000000000815250876002146126ef565b611fde6040518060400160405280600881526020017f69676f726c696e65000000000000000000000000000000000000000000000000815250886003146126ef565b6120206040518060400160405280600481526020017f706f676f00000000000000000000000000000000000000000000000000000000815250896004146126ef565b6120626040518060400160405280600781526020017f706f70756c6172000000000000000000000000000000000000000000000000008152508a6005146126ef565b6120a46040518060400160405280600a81526020017f6f72656e796f6d746f76000000000000000000000000000000000000000000008152508b6006146126ef565b6040516020016120bb9897969594939291906131bc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600582527f307837393600000000000000000000000000000000000000000000000000000060208301529150819061212790600786146126ef565b6121696040518060400160405280600781526020017f706c6f7463687900000000000000000000000000000000000000000000000000815250866008146126ef565b6121ab6040518060400160405280600781526020017f666f726167657200000000000000000000000000000000000000000000000000815250876009146126ef565b6121ed6040518060400160405280600a81526020017f686f72736566616374730000000000000000000000000000000000000000000081525088600a146126ef565b61222f6040518060400160405280600981526020017f6461746164616e6e65000000000000000000000000000000000000000000000081525089600b146126ef565b6122716040518060400160405280600581526020017f62726f636b0000000000000000000000000000000000000000000000000000008152508a600c146126ef565b60405180610680016040528061064a8152602001613d6e61064a91396040516020016118e5989796959493929190613478565b60008082136122bb57631615e6386000526004601cfd5b507ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff831160071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1783811c9190911c601f169190911a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361253557919050565b680755bf798b4a1bf1e582126125535763a37bfec96000526004601cfd5b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060816126fc5782611b00565b8260405160200161270d91906136a7565b604051602081830303815290604052905092915050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461065657600080fd5b60006020828403121561276457600080fd5b8135611b0081612724565b60005b8381101561278a578181015183820152602001612772565b50506000910152565b600081518084526127ab81602086016020860161276f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b006020830184612793565b60006020828403121561280257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bed57600080fd5b6000806040838503121561284057600080fd5b61284983612809565b946020939093013593505050565b60008060006060848603121561286c57600080fd5b61287584612809565b925061288360208501612809565b9150604084013590509250925092565b60008083601f8401126128a557600080fd5b50813567ffffffffffffffff8111156128bd57600080fd5b6020830191508360208285010111156128d557600080fd5b9250929050565b600080602083850312156128ef57600080fd5b823567ffffffffffffffff81111561290657600080fd5b61291285828601612893565b90969095509350505050565b60006020828403121561293057600080fd5b611b0082612809565b6000806040838503121561294c57600080fd5b61295583612809565b91506020830135801515811461296a57600080fd5b809150509250929050565b60008060008060006080868803121561298d57600080fd5b61299686612809565b94506129a460208701612809565b935060408601359250606086013567ffffffffffffffff8111156129c757600080fd5b6129d388828901612893565b969995985093965092949392505050565b600080604083850312156129f757600080fd5b612a0083612809565b9150612a0e60208401612809565b90509250929050565b600181811c90821680612a2b57607f821691505b602082108103612a64577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215612a7c57600080fd5b8151611b0081612724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f821115610a9057600081815260208120601f850160051c81016020861015612add5750805b601f850160051c820191505b81811015612afc57828155600101612ae9565b505050505050565b67ffffffffffffffff831115612b1c57612b1c612a87565b612b3083612b2a8354612a17565b83612ab6565b6000601f841160018114612b825760008515612b4c5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610e9e565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612bd15786850135825560209485019460019092019101612bb1565b5086821015612c0c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612c7b602083018486612c1e565b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260806060830152612cc3608083018486612c1e565b979650505050505050565b60008151612ce081856020860161276f565b9290920192915050565b6000808454612cf881612a17565b60018281168015612d105760018114612d4357612d72565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612d72565b8860005260208060002060005b85811015612d695781548a820152908401908201612d50565b50505082870194505b505050508351612d8681836020880161276f565b01949350505050565b7f7b226e616d65223a224375727461205e20506172616469676d2043544620323081527f323320506c61796572204e465473222c226465736372697074696f6e223a2200602082015260008251612ded81603f85016020870161276f565b7f227d000000000000000000000000000000000000000000000000000000000000603f939091019283015250604101919050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251612e5981601d85016020870161276f565b91909101601d0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561045c5761045c612e66565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615612ee057612ee0612e66565b818105831482151761045c5761045c612e66565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612f3257612f32612ef4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615612f8657612f86612e66565b500590565b8181036000831280158383131683831282161715612fab57612fab612e66565b5092915050565b808202811582820484141761045c5761045c612e66565b600082612fd857612fd8612ef4565b500690565b60008251612fef81846020870161276f565b9190910192915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000815260008551613031816009850160208a0161276f565b7f20e28888204375727461205e20506172616469676d204354462032303233222c6009918401918201527f226465736372697074696f6e223a22000000000000000000000000000000000060298201528551613094816038840160208a0161276f565b7f222c22616e696d6174696f6e5f75726c223a22646174613a746578742f68746d603892909101918201527f6c3b636861727365743d7574662d383b6261736536342c000000000000000000605882015284516130f881606f84016020890161276f565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a2250606f92909101918201527f6c61796572222c2276616c7565223a2200000000000000000000000000000000608f820152612cc3613159609f830186612cce565b7f227d2c7b2274726169745f74797065223a2259656172222c2276616c7565223a81527f323032337d5d7d00000000000000000000000000000000000000000000000000602082015260270190565b6000826131b7576131b7612ef4565b500490565b600089516131ce818460208e0161276f565b8951908301906131e2818360208e0161276f565b8082019150507f20e29482e29482535553504943494f555320434841524954592020202020202081527f3336392e3936e294820ae29482000000000000000000000000000000000000006020820152885161324481602d840160208d0161276f565b7f20202020e29482e2948246524545205245414c20455354415445202020202020602d92909101918201527f2020202020312e3734e294820ae2948200000000000000000000000000000000604d82015287516132a881605d840160208c0161276f565b7f202020202020e29482e29482475241494e53204f462053414e44202020202020605d92909101918201527f20202020203334332e3939e294820ae294820000000000000000000000000000607d82015261346961341a6134146133c56133bf61337061336a61331b608f89018f612cce565b7f2020e29482e2948244524f50504552202020202020202020202020202020202081527f203233332e3232e294820ae294820000000000000000000000000000000000006020820152602e0190565b8c612cce565b7f202020202020e29482e29482434f534d494320524144494154494f4e2020202081527f20202020202034332e3738e294820ae294820000000000000000000000000000602082015260320190565b89612cce565b7f202020e29482e29482445241474f4e20545952414e542020202020202020202081527f20203432352e3133e294820ae2948200000000000000000000000000000000006020820152602f0190565b86612cce565b7fe29482e29482484f5050494e4720494e544f20504c414345202020202020203381527f31362e3535e294820ae2948200000000000000000000000000000000000000006020820152602c0190565b9b9a5050505050505050505050565b6000895161348a818460208e0161276f565b89519083019061349e818360208e0161276f565b8082019150507f2020202020e29482e29482454e544552505249534520424c4f434b434841494e81527f202020203237312e3232e294820ae2948200000000000000000000000000000060208201528851613500816031840160208d0161276f565b7f202020e29482e294824441492b2b202020202020202020202020202020202020603192909101918201527f20203331362e3535e294820ae29482000000000000000000000000000000000060518201528751613564816060840160208c0161276f565b7f202020e29482e29482444f444f4e54203c7370616e20636c6173733d633e5b46606092909101918201527f4952535420424c4f4f445d3c2f7370616e3e20202020203233332e3130e2948260808201527f0ae294820000000000000000000000000000000000000000000000000000000060a08201526134696136a161369b61364c6136466135f760a487018d612cce565b7fe29482e294824f56454e2020202020202020202020202020202020202020203281527f38312e3930e294820ae2948200000000000000000000000000000000000000006020820152602c0190565b8a612cce565b7f20e29482e29482534b494c4c2042415345442047414d4520202020202020202081527f3231342e3033e294820ae29482000000000000000000000000000000000000006020820152602d0190565b87612cce565b85612cce565b7f3c7370616e20636c6173733d63207374796c653d666f6e742d7765696768743a81527f3930303b746578742d6465636f726174696f6e3a756e6465726c696e653e000060208201526000825161370581603e85016020870161276f565b7f3c2f7370616e3e00000000000000000000000000000000000000000000000000603e93909101928301525060450191905056fe3c7374796c653e627574746f6e7b6865696768743a323070783b6d617267696e3a30206175746f3b626f726465723a303b6261636b67726f756e643a233030453130303b637572736f723a706f696e7465723b636f6c6f723a233030307d627574746f6e3a686f7665727b746578742d6465636f726174696f6e3a756e6465726c696e657d2e627b77696474683a35313270787d2e637b636f6c6f723a233030653130307d2e617b706f736974696f6e3a6162736f6c7574653b6d617267696e3a6175746f20303b626f726465722d7261646975733a313030253b746f703a3670783b77696474683a313270783b6865696768743a313270787d3c2f7374796c653e3c626f6479207374796c653d77696474683a36343070783b6865696768743a36343070783b6d617267696e3a303e3c64697620636c6173733d62207374796c653d226865696768743a35313270783b6261636b67726f756e643a233136313631363b70616464696e673a36347078223e3c646976207374796c653d226261636b67726f756e643a233030303b626f726465722d7261646975733a3870783b6865696768743a34363470783b6f766572666c6f773a68696464656e3b626f726465723a31707820736f6c696420233334333433343b6d617267696e3a323070782030223e3c646976207374796c653d706f736974696f6e3a72656c61746976653b646973706c61793a666c65783b77696474683a35303070783b6865696768743a323470783b6261636b67726f756e643a236461646164613b70616464696e672d6c6566743a3670783b70616464696e672d72696768743a3670783e3c636f6465207374796c653d666f6e742d7765696768743a3630303b6d617267696e3a6175746f3b636f6c6f723a233438343834383e4375727461205e20506172616469676d2043544620323032333c2f636f64653e3c646976207374796c653d6261636b67726f756e643a236564366135653b6c6566743a36707820636c6173733d613e3c2f6469763e3c646976207374796c653d6261636b67726f756e643a236635626634663b6c6566743a3232707820636c6173733d613e3c2f6469763e3c646976207374796c653d6261636b67726f756e643a233632633535353b6c6566743a3338707820636c6173733d613e3c2f6469763e3c2f6469763e3c707265207374796c653d2277696474683a34393670783b6865696768743a32393270783b646973706c61793a666c65783b70616464696e673a307078203870783b636f6c6f723a236666663b6d617267696e3a30223e3c636f6465207374796c653d6d617267696e3a6175746f3ee2948c3c7370616e20636c6173733d633e4d454d424552533c2f7370616e3ee29480e29480e29480e29490e2948c3c7370616e20636c6173733d633e4348414c4c454e47455320434f4d504c455445443c2f7370616e3ee29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e294900ae29482524946462e00180057415645666d74201000000001000100401f0000401f000001001000646174610000180080416e204e465420636f6c6c656374696f6e20746f20636f6d6d656d6f7261746520706c6179657273206f6620746865204375727461207465616d20666f722074686569722070617274696369706174696f6e20616e6420706572666f726d616e636520696e20746865203230323320506172616469676d204354462e20496e206164646974696f6e20746f20646973706c6179696e6720746865207465616d277320726573756c74732c20746865206d65746164617461206f66206561636820746f6b656e20636f6e7461696e7320612031303025206f6e636861696e2d67656e65726174656420313a3338206d696e757465206c6f6e6720617564696f20617272616e67656d656e74206f66205c22496e207468652048616c6c206f6620746865204d6f756e7461696e204b696e675c222062792045647661726420477269656720776974682033206c617965726564206d656c6f6479206c696e657320616e6420612062617373206c696e65206174203131372e313837352042504d2e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2020202020e29482e29482313030252020202020202020202020202020202020202020203230302e3635e294820ae2948220202020202020202020e29482e29482424c41434b20574f524c4420202020202020202020202020203138322e3830e294820ae2948220202020202020202020e29482e2948248454c4c4f20574f524c4420202020202020202020202020203133332e3232e294820ae29494e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29498e29494e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e29480e294983c2f636f64653e3c2f7072653e3c64697620636c6173733d62207374796c653d646973706c61793a666c65783e3c627574746f6e2069643d623e3c636f64653e5b205375626d697420504354467b43555237345f323032337d205d3c2f636f64653e3c2f627574746f6e3e3c2f6469763e3c617564696f2069643d613e596f75722062726f7773657220646f6573206e6f7420737570706f72742074686520617564696f20656c656d656e743c2f617564696f3e3c64697620636c6173733d62207374796c653d706f736974696f6e3a72656c61746976653b6865696768743a31323870783e3c63616e7661732069643d64207374796c653d706f736974696f6e3a6162736f6c7574652077696474683d353132206865696768743d3132383e3c2f63616e7661733e3c6469762069643d63207374796c653d22626f726465723a2e35707820736f6c696420233030653130303b6865696768743a31323770783b706f736974696f6e3a6162736f6c7574653b6c6566743a30223e3c2f6469763e3c2f6469763e3c2f6469763e3c7363726970743e646f63756d656e742e676574456c656d656e744279496428226222292e6164644576656e744c697374656e65722822636c69636b222c28293d3e7b673d303b6a3d303b666f7228733d22222c743d303b743c332a322a2a31383b742b2b297b633d2263686172436f64654174222c753d28743e3e31382925332c723d2874293d3e74263235363f74263235353a3235362d287426323535292c613d33302a742a322a2a2828222527282a2c282c2c2b272b2b2a262a2a2527282a2c282c312f2c282c2f2f2f2f225b635d28743e3e3131263331292b5b302c31322c372c31395d5b743e3e313626335d292f31322d36292c783d33302a742a322a2a282822252c252c252c252c252c252c282f282f2c332c3328302c33225b635d28382a28743e3e313726313f323a743e3e31352631292b28743e3e313226372929292f31322d37292c793d612a322c7a3d792a323b732b3d537472696e672e66726f6d43686172436f64652828722861292f28352d28753e3129292b28753e30292f352a722879292b28753e31292a2872287a292f352b722878292f342929253235367c30297d613d646f63756d656e742e676574456c656d656e744279496428226122293b612e7372633d22646174613a617564696f2f7761763b6261736536342c556b6c47526934414741425851565a465a6d3130494241414141414241414541514238414145416641414142414167415a4746305951414147414341222b62746f612873293b612e706c617928293b736574496e74657276616c2828293d3e7b633d646f63756d656e742e676574456c656d656e744279496428226322293b632e7374796c652e6c6566743d284d6174682e6d696e283132382a672b3132382c6a2b2b292a3130302f313238292b2225223b7d2c3332293b683d28293d3e7b643d646f63756d656e742e676574456c656d656e744279496428226422292e676574436f6e746578742822326422293b642e636c6561725265637428302c302c3531322c313238293b642e66696c6c5374796c653d2223464646223b5b2e2e2e41727261792834303936295d2e6d617028285f2c69293d3e7b642e626567696e5061746828293b642e61726328692f382c3132382d732e63686172436f646541742833323736382a672b692a38292f322c312c302c322a4d6174682e5049293b642e66696c6c28293b7d293b672b2b3b6a3d303b7d3b6828293b736574496e74657276616c28682c34303936297d293c2f7363726970743ea2646970667358221220014028a5543be52c0f1d32e7068286c08c6bd65bd1b045bf34f55a45a8d5c19e64736f6c634300081500334375727461205e20506172616469676d20435446203230323320506c61796572204e4654730000000000000000000000005dd2083a0d68c4eb8fed93ef010d1b0d68b3880f

Local development

This project uses Foundry as its development/testing framework.

Installation

First, make sure you have Foundry installed. Then, run the following commands to clone the repo and install its dependencies:

git clone https://github.com/fiveoutofnine/curta-paradigm-2023.git
cd curta-paradigm-2023
forge install

Sample metadata art/audio generation

To test the metadata art output, follow the instructions in PrintCurtaPCTF2023ArtScript and run the following command:

forge script script/PrintCurtaPCTF2023Art.s.sol:PrintCurtaPCTF2023ArtScript -vvv

To test the metadata audio output, follow the instructions in PrintCurtaPCTF2023AudioScript and run the following command:

forge script script/PrintCurtaPCTF2023Audio.s.sol:PrintCurtaPCTF2023AudioScript -vvv

Deploying

  1. Configure the OWNER variable inside print-bytecode.sh, which will write the bytecode with constructor arguments to bytecode-with-constructor.txt.

  2. [Optional] Compute a create2 salt to deploy with. Here's some basic steps to do that with flood-protocol/maldon:

git clone https://github.com/flood-protocol/maldon.git
cd maldon
cargo install --path .
maldon --pattern $PATTERN $CREATE2_FACTORY_ADDRESS $CALLER $INIT_CODE_HASH
  1. Use a factory (e.g. 0x0000000000FFe8B47B3e2130213B802212439497) to deploy the bytecode to a deterministic address or just deploy the generated bytecode.

Verifying CurtaPCTF2023

To compute the constructor arguments, you can copy paste the last 64 characters from bytecode-with-constructor.txt (remember to run print-bytecode.sh with the correct constructor arguments set first) or run the following command:

cast abi-encode "constructor(address)" $OWNER

Then, to verify the contract on Etherscan, run the following command:

forge verify-contract --chain-id $CHAIN_ID --num-of-optimizations $NUM_OF_OPTIMIZATIONS --watch --compiler-version $COMPILER_VERSION $DEPLOY_ADDRESS src/CurtaPCTF2023.sol:CurtaPCTF2023 --constructor-args $CONSTRUCTOR_ARGS  --etherscan-api-key $ETHERSCAN_API_KEY --verifier "etherscan" --verifier-url "https://api.etherscan.io/api"

For example, 0x6F2Df6c95D80e359a25b6a549037F3B70879B343 was verified by running the following command:

forge verify-contract --chain-id 1 --num-of-optimizations 1000000 --watch --compiler-version "0.8.21+commit.d9974bed" "0x6F2Df6c95D80e359a25b6a549037F3B70879B343" src/CurtaPCTF2023.sol:CurtaPCTF2023 --constructor-args "0x0000000000000000000000005dd2083a0d68c4eb8fed93ef010d1b0d68b3880f" --etherscan-api-key $ETHERSCAN_API_KEY --verifier "etherscan" --verifier-url "https://api.etherscan.io/api"

About

An NFT collection to commemorate players of the Curta team for their participation and performance in the 2023 Paradigm CTF.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published