contract review {
//이름, 생일, 번호를 담은 구조체 Student를 선언하고 Student들이 들어갈 수 있는 array students를 선언하시오.
struct Student {
string name;
uint birth;
uint number;
}
Student[] Students;
//students에 Student를 넣을 수 있는 함수(이 문제는 push를 의미함)
function pushStudents(string memory _name, uint _birth, uint _number) public {
Students.push(Student(_name, _birth, _number));
}
//n번째 학생을 반환해주는 함수
function getStudent(uint _n) public view returns(Student memory){
return Students[_n-1];
}
//n번째 학생의 이름을 반환해주는 함수를 구현하세요.
function getN(uint _n) public view returns(string memory){
return Students[_n-1].name;
}
}
- 민서강사님이 최종적으로 문제를 낼 때 이런형식으로 문제를 내신다고 함.
- 이름, 생일, 번호를 담은 구조체 Student 이들의 데이터를 관리하는 array, students에 Student를 넣을 수 있는 함수, n번째 학생을 반환해주는 함수, n번째 학생의 이름을 반환해주는 함수를 구현하세요.
contract review1 {
//이름 a, 번호 b, bytes2 c를 담은 구조체 D
struct D {
string a;
uint b;
bytes2 c;
}
//D형 변수 ddd를 선언하시오.
D ddd;
//ddd에 값을 부여하는 함수를 구현하시오.
function setDDD(string memory _a, uint _b, bytes2 _c) public {
ddd = D(_a, _b, _c);
}
//D가 들어가는 array D_list를 선언하시오.
D[] D_list;
//D_list 전체를 반환하는 함수
function getD_list() public view returns(D[] memory){
return D_list;
}
//D_list 안에서 n번째 데이터를 반환하는 함수를 구현하시오.
function getN(uint _n) public view returns(D memory){
return D_list[_n-1];
}
}
/*
실습가이드
1. 1, a, ["a", "b"] -> pushABCs
2. 2, b, ["c", "d"] -> pushABCs
3. 3, c, ["e", "f"] -> pushABCs
4. 4, d, ["g", "h"] -> pushABCs
5. 5, e, ["i", "j"] -> pushABCs
6. getABCs() 해보기
*/
contract review2 {
//ABC라는 구조체 안에는 숫자형 a, 문자형 b, 문자형 array c가 들어있다.
struct ABC {
uint a;
string b;
string[] c;
}
//ABC가 들어가는 array ABCs를 구현하고 ABCs에 ABC를 넣는 함수
ABC[] ABCs;
function pushABCs(uint _a, string memory _b, string[] memory _c) public {
ABCs.push(ABC(_a, _b, _c));
}
//특정 ABC를 반환하는 함수(특정 ABC를 반환하라는 말은 특정한 즉, array에서 n번째를 반환하라는 말.)
function getN(uint _n) public view returns(ABC memory){
return ABCs[_n-1];
}
//ABCs 전체를 반환하는 함수
function getABCs() public view returns(ABC[] memory){
return ABCs;
}
//특정 ABC의 c array를 반환받는 함수를 각각 구현하시오.
function getABC_Array(uint _n) public view returns(string[] memory){
return ABCs[_n-1].c;
}
}
contract MAPPING {
mapping(uint => uint) a; // mapping(자료형 => 자료형) 이름
mapping(string => uint) b; // key-value 쌍이 각각 string형과 uint형
mapping(bytes=> uint) c; // bytes를 넣으면 uint가 나옴
function setB(string memory _key, uint _value) public {
b[_key] = _value; //mapping이름[_key값] = _value값
}
function getB(string memory _key) public view returns(uint) {
return b[_key]; //mapping이름[_key값] -> value값을 돌려줌
}
function setC(bytes memory _key, uint _value) public {
c[_key] = _value;
}
function getC(bytes memory _key) public view returns(uint) {
return c[_key];
}
struct Student {
uint number;
string name;
string[] classes;
}
mapping(string => Student) Teacher_Student;
function setTeacher_Student(string memory _Teacher, uint _number, string memory _name, string[] memory _classes) public {
Teacher_Student[_Teacher] = Student(_number, _name, _classes);
}
function getTeacher_Student(string memory _Teacher) public view returns(Student memory) {
return Teacher_Student[_Teacher];
}
}
Mapping은 Key값과 Value값이 있고, Value값을 얻기 위해서 Key값을 사용한다.
Mapping은 Key값과 Value값을 어떻게 사용하는지를 이해하면 문제를 이해하는데 도움이 된다.
/*
실습 가이드
1. setTeacher_Student 해보기
2. getTeacher_Student 해보기
3. setTeacher_Class -> 같은 선생이름으로 여러명 학생 해보기
4. getTeacher_Class -> 3번에서 설정한 선생이름으로 해보기 -> 3번에서 등록한 학생 모두 나오는지 확인
*/
contract MAPPING1{
struct Student{
uint number;
string name;
string[] classes;
}
//어떤 선생님이 담당 학생이 가지고 있음
mapping(string => Student) Teacher_Student;
//어떤 선생님이 여러학생을 가지고 있음
mapping(string => Student[]) Teacher_Class;
function setTeacher_Student(string memory _Teacher,uint number,string memory name,string[] memory classes) public {
Teacher_Student[_Teacher] = Student(number,name,classes);
}
function getTeacher_Student(string memory _Teacher) public view returns(Student memory) {
return Teacher_Student[_Teacher];
}
function setTeacher_Class(string memory _Teacher, uint _number, string memory _name, string[] memory _classes) public {
Teacher_Class[_Teacher].push(Student(_number, _name, _classes));
}
function getTeacher_Class(string memory _Teacher) public view returns(Student[] memory) {
return Teacher_Class[_Teacher];
}
}
contract fixedArray {
/*
실습 가이드
0. getALength(), getA(), getBLength(), getB() 결과 확인하기
1. 1 -> pushA, 2 -> pushA, 3,4 진행
2. getA(), getALength() 해보기
3. 1 -> pushB2, 3-> pushB2, 5,7, 진행
4. getB(), getBLength() 해보기
*/
uint[] a; // a[n]
uint[4] b;
function getALength() public view returns(uint) {
return a.length;
}
function pushA(uint _n) public {
a.push(_n);
}
function getA() public view returns(uint[] memory) {
return a;
}
function getBlength() public view returns(uint) {
return b.length;
}
function pushB(uint n, uint _n) public {
b[n] = _n;
}
function getB() public view returns(uint[4] memory) {
return b;
}
uint count;
function pushB2(uint _n) public {
b[count++] = _n;
}
function pushB3(uint _n) public {
b[++count] = _n;
}
function getCount() public view returns(uint) {
return count;
}
}
contract ForLoop {
function forLoop() public pure returns(uint){
uint a;
for(uint i=1; i<6; i++ /*시작점; 끝점; 변화방식*/) {
a = a+i; // a+=i
}
return a;
}
function forLoop2() public pure returns(uint, uint){
uint a;
uint i;
for(i=1; i<6; i++ /*시작점; 끝점; 변화방식*/) {
a = a+i;
}
return (a,i);
}
function forLoop3() public pure returns(uint, uint) {
uint a;
uint i;
for(i=1;i<=5; i++) {
a=a+i;
}
return (a,i);
}
uint[4] c;
uint count;
function pushA(uint _n) public {
c[count++] = _n;
}
function getC() public view returns(uint[4] memory) {
return c;
}
function forLoop4() public view returns(uint) {
uint a;
for(uint i=0;i<4;i++) {
a=a+c[i];
}
return a;
}
function forLoop5() public view returns(uint) {
uint a;
for(uint i=0; i<c.length;i++) {
a=a+c[i];
}
return a;
}
uint[] d;
function pushd(uint _n) public {
d.push(_n);
}
function getD() public view returns(uint[] memory) {
return d;
}
function forLoop6() public view returns(uint) {
uint a;
for(uint i=0;i<d.length;i++) {
a=a+d[i];
}
return a;
}
}
수수료(가스비) 이야기.
페페, 도지 이런거 사지마라.
사이드체인, 라이트닝네트워크가 주목을 받고 있다.
BRC-20이 어떤 의미를 갖는지에 대해서도 알려주신다고 하심.
building blockchain with language
오늘도 많은 내용을 배웠다. 복습한 부분이 많은것 같지만 이해하고 넘어가야하는 내용이 많다보니 정보가 계속 쌓이는 느낌이다. 내일은 테스트도 있고, 블록체인 백서도 읽어오라고 숙제를 내주셔서 할게 더 많아졌다. 어서 다른것들도 마무리해야지! 오늘도 현진했따!