오늘도 하루가 시작되었다. 오늘은 전반적으로 지금까지 배웠던 내용들에 대해서 다시한번 복습하고 부족했던 정보에 대해 좀 더 디테일하게 알려주시는 시간을 가졌다. 내일부터는 본격적으로 블록체인에 대한 세부적인 내용에 대해 공부한다고 하니 마음을 단단히 먹어야 될 것같다. 일단 오늘도 반복적이지만 배웠던 내옹에 대해 다시 정리하고 복습하는 시간을 가져보겠다.
끝까지 자신의 이득을 위해서만 움직인다. 시장경제의 끝을 생각하고 바라보는게 중요하다.
- 익명성 : 계좌번호만 보면 누구의 계좌인지 알수없다.
- 추적가능성 : 관련된 거래를 살펴볼수있는게 특징.(누구의 지갑인지를 알아낸 다음에 그사람이 어떤 토큰이나 코인을 사면 그걸 따라서 투자하는 경우도 있었다고 한다.)
- 무신뢰성 : 현실에서는 우리가 제 3기관을 믿어야 하는데 블록체인은 거래하는 상대방도 믿지 않아도 된다. 시스템 자체가 신뢰가 된다.
- 분산원장 : 시스템 내 모든 참가자들은 거래의 정보를 기록하고 있다.
- 탈중앙화 : 전통적인 네트워크 시스템과 달리, 블록체인에는 중앙화된 주체가 존재하지 않는다.
- 합의알고리즘 : 합의알고리즘이 나오게 된 이유는 어떤 권한을 가지고 있는 사람이 없기 때문에 그리고 옳은 결정을 할 주체가 없기 때문이다.
- 합의 알고리즘의 규칙을 어떻게 정할것인가 : 먼저 푼사람이 있으면 그사람이 맞다고 생각하고 그사람을 따라간다. / 작업증명 = pow = 채굴
- 변경불가능성 : 바뀐 정보를 빨리 알아내는것이 특징.(변경이 불가능한 것은 아니다.)
채굴자체가 멈추는건 아니다. 자의적 의지로 중단하는것이다.
(코인발행이 끝난다라고 표현하는게 맞다!)
채굴자 보상 - 블록보상, 거래수수료
- 코인베이스 거래 - 채굴자가 보상을 받는 거래 / 보내는 사람은 없고 받는사람만 있는 거래(모든 블록이 하나씩 가지고 있음.)
- 12.6545346BTC를 코인베이스 거래를 통해 받았으면 원래 12.5같이 딱 떨어져야 하지만 뒷자리는 코인베이스를 통해 발생한 수수료가 포함되어있다.
- a가b에게 4btc를 보내면 a는 15에서 4btc가 빠져나가고 b는 3btc를 받는다 그리고 허공을 떠도는 1btc는 채굴자에게 수수료로 들어간다.
코인을 만든다음에 계좌를 우리 마음대로 변경시킬 수도 있다.(이더리움 계열)
지갑주소 잘못쳐도 코인 나간다.
bits값을 여러정보로 바꿔내서 만들어낸 값이 타겟값이 된다.
타겟값이 작아야하는 이유 - 한계점이 있기 때문에 / 16진수의 64자리가 넘어갈수도 있기 때문에
지갑주소 = 공개키 = btc 받을때 필요
btc를 받을때 바로 쓸수없게 lockingscript로 잠궈놓는다.
그걸 풀수있는게 개인키다. = 개인키 = btc를 쓸때 사용.
합의알고리즘 - 다수가 참여하여 옳은 정보를 구하는 과정 블록생성은 어려우나 검증은 쉬움.
pos(지분증명) : 얼마만큼 내가 토큰을 예치했는가로 증명하는것. 전체 예치액이 100만원인데 내가 10만원을 넣었다면 나는 10%를 받게 되는걸 증명하는게 지분증명.
51% 공격 : 나머지 애들에 비해서 51%이상의 hashingpower를 가지고 있다고 했을때 공격을 가하고 공격에 성공하면 그걸 51%공격이 성공했다고 한다.
오염된 정보도 다수가 찡그리면 오염된 정보인데 다수가 아무렇지 않다면 오염된 정보가 아닐수도 있다.
블록갯수 2016개 마다 난이도를 조절.
miner : 채굴자
mempool - 아직 거래가 성립되지 않은, 즉 0 컨펌 상태의 트랜잭션들이 저장되는 공간. miner는 Mempool에 대기중인 트랜잭션 중 수수료가 높은 거래를 우선적으로 선별하게 된다.
오후에는 전날 제대로 배우지 못했던 scss와 javascript를 간단하게 배워보았다. 오늘은 정말 내가 집중을 못한건지 내용이 어려웠던건지 수업이 너무 어렵게 느껴지고 제대로 따라가질 못했다. 강사님이 알려주는 내용도 이해하기가 어렵고, 내 머릿속에서 정리가 되지 않은 상태에서 계속 다른 정보를 주입시키니까 머리가 계속 복잡해지고 멘탈이 무너진 것 같다. 사실 TIL로 안쓰고 싶었지만 나와의 약속이고 포기하려고 국비지원을 시작한것이 아니기 때문에 다시 마음을 다잡아야겠다고 마음은 먹었지만 솔직히 내일도 자신은 없다. 은찬매니저님과 대화를 해봤지만 결국은 뽀족한 수는 없었고, 내가 좀 더 노력하고 포기하지 않는 마음을 갖는 방법밖에는 없다는 결론에 도달했다. 그래서 오늘은 일단 정리했던 내용들에 대해서만 내용 정리를 해보고 남은 시간 javascript를 복습하는 시간을 가져볼까 한다.
scss를 다시 순서대로 진행하며 강의를 시작했지만 VSC에 문제가 생겨서 나 혼자 뒤쳐지기 시작했다. 사실 그때부터 멘탈이 나가기 시작했는데 아무래도 다른 동기들이 같이 배우는 상황이라 강사님을 멈출수가 없었고, 그래도 강의를 진행하다보니 계속 뒤로 쳐지기 바빴다. 다행히 중간에 강사님께 부탁드려 해결을 했고, 다시 수업을 집중을 해보려고 했다.
sass --watch input.scss style.css (node 연결)
- 어제와 마찬가지로 node연결에 문제가 있었다. 오늘은 일단 해결하는 법을 알았고, node 연결시에 위 코드에 대한 어느정도의 정보를 알고있어야겠다는 생각을 했다. HTML/CSS에 대한 부분도 급하게 강사님을 통해서 완성했기 때문에 부족한 부분이 많고, 특히 scss는 처음부터 다시 내가 코드를 짜봐야하기 떄문에 아무래도 금요일부터 주말까지 시간을 내서 해보는게 좋겠다고 은찬매니저님이 말씀해주셨다. 그래서 오늘은 잠깐 배운 javascript에 대해서 배운부분을 조금 적어보겠다.
- 세명님이 scss에 대해서 오늘 배운 내용을 잘 정리한 것 같아 필요할때 봐야겠다.
console.log("Hello, JS!");
var / let 변수가 영향력을 가지고 있는 범위가 다름. 같이 쓰이지만 두개는 다름.
잘못된 위치에 변수가 들어가게 됬을때 var같은 경우는 호이스팅이 동작하지 않는데 let을 쓰게되면 터미널에 에러가 뜬다.
const에 들어가는 상수는 관행적으로 대문자로 작성하는게 좋다.
var는 잘 안쓰인다.
값이 바뀌는 애들은 let / 값이 안바뀌는 상수는 const 사용한다.
string = 문자열
카멜 표기법 = 낙타표기법 (변수명을 만들때 띄어쓰기를 하면 안되니까 가독성을 높이기 위해서 단어 앞을 대문자로 한다)
전역변수, 지역변수 (if문) 영향을 주는 범위
var myName = "hong sung hyun";
if (true) {
var myName = "h662";
}
console.log(myName); // 문제점을 알기 위해서는 var -> let으로 고쳐보면 됩니다.
// 주석을 바꿔가며 실행해보세요.
var myName = "hong sung hyun";
var myName = "h662";
// let myName = "hong sung hyun";
// let myName = "h662";
// 주석을 바꿔가며 실행해보세요.
var myName = "hong sung hyun";
var myName = "h662";
// let myName = "hong sung hyun";
// let myName = "h662";
const myInfo = {
name: "Hong Sung Hyun",
age: 34,
job: "programmer",
};
console.log(myInfo);
myInfo.job = "ceo";
console.log(myInfo); // 결과가 바뀌는지 확인해보세요.
console.log(myName);
var myName = "h662";
console.log(myName);
💡 let과 const 호이스팅
let
과const
로 선언한 변수도 호이스팅 대상이지만,var
와 달리 호이스팅 시undefined
로 변수를 초기화하지는 않습니다. 따라서 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 예외가 발생합니다.
const I_AM_PROGRAMMER = true;
const MY_FAVORATE_DRINK_IS_ZERO_COKE = true;
const I_HAVE_A_THOUSAND_BITCOINS = false;
// if의 조건을 바꿔가며 테스트 해보세요.
if (I_HAVE_A_THOUSAND_BITCOINS) {
console.log("You're good person 😇");
} else {
console.log("You're liar 🤬");
}
const TRUE = true;
const FALSE = false;
// && AND
console.log(TRUE && TRUE);
console.log(TRUE && FALSE);
console.log(FALSE && TRUE);
console.log(FALSE && FALSE);
// || OR
console.log(TRUE || TRUE);
console.log(TRUE || FALSE);
console.log(FALSE || TRUE);
console.log(FALSE || FALSE);
// ! NOT
console.log(!TRUE);
console.log(!FALSE);
자바스크립트에서 연산자 간단하게 확인
and는 둘다 트루여야 트루가 노출
or은 둘중 하나만 트루여도 트루가 노출
not은 넣은 조건에 반대로 노출
const BLOCK = "블";
const BBLE = "쁠";
const CHAIN = "체";
const SCHOOL = "스";
const rightWord = BLOCK + CHAIN + SCHOOL;
if (rightWord === "블체스") {
console.log("블체스 화이팅!");
}
const 나는프로그래머다 = true;
const 나는천개의비트코인이있다 = false;
const 내가제일좋아하는음료는제로콜라다 = true;
// 나머지 변수도 사용해보세요.
let trueOrFalse = 나는프로그래머다;
if (trueOrFalse) {
console.log("당신은 거짓을 말하지 않는 선량한 사람입니다 😇");
} else {
console.log("당신은 거짓말쟁이에 나쁜 사람입니다 🤬");
}
const BLOCKCHAIN_SCORE = 10;
const FRONTEND_SCORE = 10;
let TOTAL_SCORE = BLOCKCHAIN_SCORE + FRONTEND_SCORE;
if (TOTAL_SCORE > 78) {
console.log("Great 😎");
} else if (TOTAL_SCORE > 50) {
console.log("Good 😀");
} else if (TOTAL_SCORE > 30) {
console.log("Try harder 🙂");
} else {
console.log("Sad ,.,.., 🥹");
}
if (TOTAL_SCORE < 0) {
console.log("??? 💀");
}
{
"name": "Baby Thor",
"description": "so cute",
"image": "https://이미지 경로",
"attributes": [
{
"trait_type": "BACKGROUND",
"value": "LivingRoom Bar"
},
{
"trait_type": "EARRING",
"value": "Silver Hoop"
},
{
"trait_type": "WEAPON",
"value": "Hammer"
},
{
"trait_type": "Light",
"value": "Soft Sunlight"
},
{
"trait_type": "Costume",
"value": "Viking Armor"
},
{
"trait_type": "Artist",
"value": "Dio"
}
]
}
NFT를 만들기 위해서 강사님과 코드를 만들어놓은 상태다. 위의 코드는 강사님이 기본적으로 주신 코드에 NFT에 들어갈 정보를 정리해놓은 상태이다.
이렇게 하루가 또 갔다. 나는 이제 TIL을 마무리했으니 본격적으로 남은 시간동안 오늘 배운 javascript를 다시 복습해보러 가야한다. 은찬매니저님이 하라는대로 하면 그래도 중간은 가지 않을까라는 생각에 의지를 가지고 해보려고한다. scss와 javascript의 경우 부족한 부분이 많기 때문에 코드만 달아두고 해당 내용에 대한 정보는 다시 TIL에 정리해서 올리는걸로 하겠다.